我正在使用Flask-Alchemy创建Flask应用程序并访问MySQL数据库。
我有以下Class来访问表:
class price_table(db.Model):
id = db.Column(db.Integer, primary_key = True)
trans_id = db.Column(db.Integer)
timestamp = db.Column(db.Integer)
order_type = db.Column(db.String(25))
price = db.Column(db.Numeric(15,8))
quantity = db.Column(db.Numeric(25,8))
def __repr__(self):
return 'id'
对于表'price_table',这种方法非常出色,但问题是我有几个表与'price_table'列相同的列,我只知道运行时的名称。
我想重用上面的类,所以我想我可以将 tablename 更改为我需要阅读的表的名称,但这不起作用,程序继续读取'价格表“
如何在运行时覆盖表名?
答案 0 :(得分:2)
您应该使用: tablename :
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True)
email = Column(String(120), unique=True)
答案 1 :(得分:0)
根据jbub留下的评论,我发现以下解决方案可以根据需要进行操作。
from app import db
def ClassFactory(name):
tabledict={'id':db.Column(db.Integer, primary_key = True),
'trans_id':db.Column(db.Integer),
'timestamp':db.Column(db.Integer),
'order_type':db.Column(db.String(25)),
'price':db.Column(db.Numeric(25,8)),
'quantity':db.Column(db.Numeric(25,8)),}
newclass = type(name, (db.Model,), tabledict)
return newclass