나는 이미 비슷한 질문을했지만, 나는 그것을 바꿔 쓸 수 있다고 생각했다. 또는 여기에 무슨 일이 일어나고 있는지 밝히기 위해 내가 한 일을 보여줄 수 있을지도 모른다.Flask-SQLAlchemy의 동일 데이터베이스
현재 나는이 동일한 데이터베이스를 가지고 있고, 나는이 같은 (내가 본 또 다른 질문에 따라) 문제를 해결하기 위해 시도했습니다
이class BaseTable(db.Model):
__tablename__ = 'TableName'
col = db.Column(db.Integer)
class SubTable1(BaseTable):
__bind_key__ = 'bind1'
class SubTable2(BaseTable):
__bind_key__ = 'bind2'
지금 가장 최근의 바인드는 이것에 문제가 있음 도처에서 사용되므로 다른 곳에서이 작업을 수행하면
SubTable1.query.filter_by(col=12).all()
두 번째 데이터베이스에서 결과를 얻습니다. SubTable 클래스의 위치를 바꾼다면 결과는 같습니다. (명확성을 위해 편집 : 바인드가 마지막으로 정의 된 바에 따라 결과가 나오고, 전환해야한다면 대신 현재 'bind1'대신 'bind2'). 나는 무엇을해야 할지를 정말로 모른다. 그래서 당신이 어떤 식 으로든 도움이된다면 그것은 대단 할 것이다.
감사합니다.
편집 :이 작업을 수행하는 것이 불가능하거나 (더 좋거나 다른 방법을 알고 있다면) 알려주십시오. 두 개의 서로 다른 db 객체를 갖는 것과 같은 작업을 수행 할 수 있다면 좋을 것입니다. 실제로 어떻게 수행 할 것인지 또는 어떤 종류의 함축적 의미가 있는지 알지 못합니다.
EDIT 2 : 몇 시간 동안이 작업을 마친 후 마침내 결론을 내 렸습니다. __init__.py에서
:
models.py에서db1 = SQLAlchemy(app)
db2 = SQLAlchemy(app)
:
class Table1(db1.Model):
__tablename__ = 'TableName'
__bind_key__ = 'bind1'
col = db1.Column(db1.Integer)
class Table2(db2.Model):
__tablename__ = 'TableName'
__bind_key__ = 'bind2'
col = db2.Column(db2.Integer)
넌센스 이유는 귀속 번만 아닌 정의되지 변경하고, 두 개의 테이블 이름 될 수 있다는 바인딩이 다른 경우에도 동일 할 수 있습니다. 따라서 2 개의 MetaData 인스턴스를 만들어야합니다. 그렇지 않으면 SQLAlchemy가 화를냅니다. 그래서 문제는 SQLAlchemy의 한계라고 밝혀졌습니다.