Tôi đã hỏi một câu hỏi tương tự, nhưng tôi nghĩ có lẽ tôi có thể nói lại nó, hoặc chỉ ra những gì tôi đã làm thêm để làm sáng tỏ những gì đang xảy ra ở đây.Cơ sở dữ liệu giống hệt trong Flask-SQLAlchemy
Hiện nay tôi có 2 cơ sở dữ liệu giống hệt nhau, và tôi đã cố gắng để giải quyết vấn đề (theo một câu hỏi tôi thấy) như thế này:
class BaseTable(db.Model):
__tablename__ = 'TableName'
col = db.Column(db.Integer)
class SubTable1(BaseTable):
__bind_key__ = 'bind1'
class SubTable2(BaseTable):
__bind_key__ = 'bind2'
Vấn đề ở đây là bây giờ các ràng buộc gần đây nhất là được sử dụng ở mọi nơi, vì vậy nếu tôi làm điều này ở một nơi khác:
SubTable1.query.filter_by(col=12).all()
Sau đó, nó sẽ là kết quả từ cơ sở dữ liệu thứ hai. Nếu tôi chuyển đổi vị trí của lớp SubTable, thì kết quả sẽ giống nhau (Chỉnh sửa để rõ ràng: theo đó tôi có nghĩa là kết quả đến từ bất kỳ liên kết nào được xác định cuối cùng, nếu chúng được chuyển đổi, thay vào đó nó sẽ truy vấn 'bind2' thay vì 'bind1' như hiện tại). Tôi thực sự không biết phải làm gì, vì vậy nếu bạn có thể giúp đỡ bằng bất kỳ cách nào tuyệt vời.
Cảm ơn.
EDIT: Nếu không thể (hoặc bạn chỉ đơn giản là biết một cách tốt hơn hoặc thậm chí khác nhau) để làm điều này, xin vui lòng cho tôi biết. Nếu tôi có thể làm một cái gì đó giống như có hai đối tượng db khác nhau, điều đó cũng sẽ tốt, tôi chỉ không thực sự biết cách thực hiện điều đó hoặc loại tác động nào có thể xảy ra.
EDIT 2: Sau khi làm việc này với giờ và giờ, cuối cùng tôi đã đi đến kết luận về cách thực hiện việc này.
Trong __init__.py:
db1 = SQLAlchemy(app)
db2 = SQLAlchemy(app)
Trong models.py:
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)
Lý do vớ vẩn này là gắn kết chỉ có thể được định nghĩa một lần và không thay đổi, và không có hai tên bảng có thể giống nhau, ngay cả khi các liên kết khác nhau. Vì vậy, bạn phải tạo 2 trường hợp MetaData hoặc SQLAlchemy khác bị điên. Vì vậy, nó chỉ ra vấn đề là một hạn chế trong SQLAlchemy.