在SQLAlchemy中,如何根据月份调用不同的数据库表。 每个月对应一个数据库表。 我这样做了,但是有一个问题。
Class MyBaseClass (object):
Id = db.Column (db.Integer, primary_key = True)
在我的界面中,就是这种情况
Def test ():
Time = request.get_json (). Get ( 'time')
Tablename = str (time) # time format: such as 201610
Table_object = type (tablename.title (), (MyBaseClass, db.Model), { '__tablename__': tablename})
对界面的第一次调用很好,但是如果再次调用它,则会发生以下错误
Specify 'extend_existing = True' to redefine options and columns on an existing Table object. Sqlalchemy.exc.InvalidRequestError: Table 'xxx' is already defined for this MetaData instance.
是否可以在表之后动态构建表来删除此实例?因为我必须第二次打电话,所以已经建议了。
答案 0 :(得分:1)
我是一名SQLAlchemy初学者,刚刚赢得了与ORM框架完全相同的战斗。您构建新类型的方法已达到目标。您还应该查看Augmenting the Base手册。这是my solution,它结合了基本增强和动态类型创建。
我已经解决了这个问题,但这不是我赢得的#34;争斗。以下是我的建议:SQLAlchemy ORM旨在让您的生活更轻松,但要利用它,您必须使您的数据符合ORM预期。这就是我所做的,而不是与之斗争,并对最终结果非常满意。
但是,如果你需要坚持历史性的设计或改变它没有意义,那么使用ORM会带来更多的眼泪而不是喜悦,而简单的方法就是切换到更灵活的SQLAlchemy Core和宽容。