我是python / Flask / SQLAlchemy的初学者,很抱歉,如果我的问题很愚蠢。
我想使用Flask-SQLAlchemy创建一个使用Flask的API,如下所示:
一个用户/密码的sqlite数据库
SQLALCHEMY_DATABASE_URI =' sqlite:////path/to/users.db'
class User(DB.Model):
__tablename__ = 'users'
id = DB.Column(DB.Integer, primary_key=True)
username = DB.Column(DB.String(64), index=True)
password = DB.Column(DB.String(128))
假设我有多个"客户"用户可以使用
创建的女巫$ http POST http://localhost:5000/api/customers/ name = customer1
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',
...
}
我的问题是:
我没有固定数量的"客户"所以我不能为每个创建一个模型类,并指定" bind_key "为每个人。是否可以使用Flask-SQLAlchemy执行此操作,或者我需要使用纯SQLAlchemy?
我有3"客户"在data / as customer1.db,customer2.db和customer3.db。
我将启动应用程序并创建SQLALCHEMY_BINDS字典列出数据中的文件/然后DB.create_all()
请求特定的"客户"
如何使用Flask-SQLAlchemy绑定到正确的.db文件 DB.session?
我已阅读Using different binds in the same class in Flask-SQLAlchemy
答案 0 :(得分:2)
为什么您希望为每个客户提供完全独立的数据库文件?
在任何情况下,使用直接的SQLAlchemy都会更容易。您可以创建一个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数据库。