Python Flask Sqlalchemy使用同一模型(类DB.model)绑定多个数据库
我是python/Flask/SQLAlchemy的初学者,如果我的问题很愚蠢,那么很抱歉 我想使用Flask SQLAlchemy通过Flask创建一个API,如下所示:Python Flask Sqlalchemy使用同一模型(类DB.model)绑定多个数据库,python,flask,sqlalchemy,flask-sqlalchemy,Python,Flask,Sqlalchemy,Flask Sqlalchemy,我是python/Flask/SQLAlchemy的初学者,如果我的问题很愚蠢,那么很抱歉 我想使用Flask SQLAlchemy通过Flask创建一个API,如下所示: 一个用于用户/密码的sqlite数据库 SQLALCHEMY\u数据库\u URI='0sqlite:////path/to/users.db" 假设我有多个“客户”,用户可以使用 $http POST name=customer1 我需要为每个“客户”创建一个单独的sqlite文件: 我的问题是: 我没有固定数量的“客户”
为什么每个客户都需要完全独立的DB文件 无论如何,直接炼金术更容易做到这一点。您可以创建一个getter函数,该函数返回指向db文件的会话
def get_session(customer_id):
sqlite_url = 'sqlite:////path/customer%s.db' % customer_id
engine = create_engine(sqlite_url)
# initialize the db if it hasn't yet been initialized
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
return session
然后可以使用并关闭该会话
但是,如果不了解您的具体用例,就很难理解为什么要这样做,而不是只使用一个SQLite数据库。您好,Jumbopp,谢谢您的回答。此应用程序将用于不同的站点,以连接到一些服务器并获取一些数据。此应用程序还将由多人使用,以查看数据(1 db)并与其他数据(其他db)进行比较。只需复制数据库文件并将其放在我的数据库目录中,应用程序就可以工作了。我可能最终会有100个db文件。我是SQLAlchemy新手,没有看到使用Flask SQLAlchemy的确切优势,但我确定我想使用它的分页。我不确定我是否可以将它用于您的方法,对吗?您所说的一切都可以在使用关系模式的单个DB文件中更轻松地完成,但是您的调用。普通SQLAlchemy没有分页功能,但是您可以从Flask SQLAlchemy源代码轻松地添加该类。好的,谢谢。从其他问题中,我找到了使用普通SQLAlchemy的不同方法,但我想知道是否可以使用Flask SQLAlchemy和binds,因为我计划使用与Flask SQLAlchemy集成的其他软件包,如Flask Migrate和Flask棉花糖。
class Customer(DB.Model):
__tablename__ = 'customer'
customer_id = DB.Column(DB.Integer, primary_key=True)
customer_name = DB.Column(DB.String, unique=True, index=True)
SQLALCHEMY_BINDS = {
'customer1' = 'sqlite:////path/customer1.db',
'customer2' = 'sqlite:////path/customer2.db',
...
}
def get_session(customer_id):
sqlite_url = 'sqlite:////path/customer%s.db' % customer_id
engine = create_engine(sqlite_url)
# initialize the db if it hasn't yet been initialized
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
return session