У меня есть несколько баз данных, например order_db1
、 order_db2
、 order_db3
,
, но все они имеют таблицу order
, но данные в order_db1.order
отличаются от order_db2.order
,
order_db1.order
| id | сумма |
| 1 | 100 |
order_db2.order
| id | сумма |
| 1 | 200 |
как я могу получить доступ к мульти-базе данных с тем же именем таблицы в flask_sqlalchemy?
Я пробовал вот так , использовать SQLALCHEMY_BINDS
:
# -*- coding: utf-8 -*-
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import logging
class Application(Flask):
def __init__(self, import_name):
super(Application, self).__init__(import_name)
app = Application(__name__)
db = SQLAlchemy(app)
app.config['SQLALCHEMY_BINDS'] = {
'order_db1': 'mysql://%s:%s@%s/order_db1' % (mysql_user, quote_plus(mysql_pwd),mysql_host),
'order_db2': 'mysql://%s:%s@%s/order_db2' % (mysql_user, quote_plus(mysql_pwd),mysql_host),
}
class Order1(db.model):
__bind_key__ = 'order_db1'
__tablename__ = 'order'
id = db.colum(db.Interger)
amount = db.colum(db.Interger)
class Order2(db.model):
__bind_key__ = 'order_db2'
__tablename__ = 'order'
id = db.colum(db.Interger)
amount = db.colum(db.Interger)
q1=Order1.query.get(1)
q2=Order2.query.get(1)
It сказал мне:
'sqlalchemy.ex c .InvalidRequestError: Таблица' order 'уже определена для этого экземпляра MetaData. Укажите 'extension_existing = True', чтобы переопределить параметры и столбцы в существующем объекте таблицы. '
Но если я добавлю __table_args = {'extend_existing': True}
class Order1(db.model):
__bind_key__ = 'order_db1'
__tablename__ = 'order'
__table_args = {'extend_existing': True}
id = db.colum(db.Interger)
amount = db.colum(db.Interger)
class Order2(db.model):
__bind_key__ = 'order_db2'
__tablename__ = 'order'
__table_args = {'extend_existing': True}
id = db.colum(db.Interger)
amount = db.colum(db.Interger)
q1=Order1.query.get(1)
q2=Order2.query.get(1)
, данные в q1
будут такими же q2
, значит id = 1, сумма = 200
Я хочу это как:
q1: id = 1, сумма = 100
q2: id = 1, сумма = 200