Daha önce benzer bir soru sordum, ama belki de onu yeniden ifade edebilirim veya daha neler yaptığımı gösterdiğimi düşündüm.Flask-SQLAlchemy'deki aynı veritabanları
Şu anda 2 özdeş veritabanları var ve böyle (gördüğüm başka bir soru göre) problemini çözmeye çalıştı ettik:
class BaseTable(db.Model):
__tablename__ = 'TableName'
col = db.Column(db.Integer)
class SubTable1(BaseTable):
__bind_key__ = 'bind1'
class SubTable2(BaseTable):
__bind_key__ = 'bind2'
şimdi en son bağlama bu sorun olduğunu her yerde kullanılır, bu yüzden eğer bunu başka bir yerde yaparsam:
SubTable1.query.filter_by(col=12).all()
Daha sonra ikinci veritabanından sonuçlar alır. Eğer SubTable sınıflarının konumlarını değiştireceksem, sonuçlar aynıdır (Netlik için Düzenle: Sonuçta, sonuçların ne olursa olsun bağlamanın son olarak tanımlandığı, değiştirileceklerse, bunun yerine sorgulanacağı anlamına gelir. Şu anda yaptığı gibi 'bind1' yerine 'bind2'. Ne yapacağımı gerçekten bilmiyorum, bu yüzden eğer herhangi bir şekilde yardım ederseniz harika olurdu.
Teşekkürler.
DÜZENLEME: Bunu yapmak imkansızsa (veya daha iyi ya da farklı bir yolla biliyorsanız), lütfen bana bildirin. İki farklı db nesnesine sahip olmak gibi bir şey yapabilseydim, bu da iyi olurdu, bunu nasıl yapacağımı gerçekten bilmiyorum ya da ne tür etkileri olacaktı.
DÜZEN 2: Bunu saatlerce ve saatlerce beklettikten sonra, bunun nasıl yapılacağına dair bir sonuca vardım. __init__.py olarak
:
models.py olarakdb1 = 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)
bu saçmalığa nedeni bağlar sadece bir kez değil, tanımlanmış değişti ve hiçbir iki tablo adları edilebilmesidir Bağlantılar farklı olsa bile aynı olabilir. Yani 2 MetaData örneğini yapmak zorundasınız, yoksa SQLAlchemy delirir. Yani sorun, SQLAlchemy'de bir sınırlama ortaya çıkıyor.