在SQLAlchemy中,如何根据月份调用不同的数据库表

时间:2016-10-12 01:07:41

标签: python mysql sqlalchemy

在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.

是否可以在表之后动态构建表来删除此实例?因为我必须第二次打电话,所以已经建议了。

1 个答案:

答案 0 :(得分:1)

我是一名SQLAlchemy初学者,刚刚赢得了与ORM框架完全相同的战斗。您构建新类型的方法已达到目标。您还应该查看Augmenting the Base手册。这是my solution,它结合了基本增强和动态类型创建。

我已经解决了这个问题,但这不是我赢得的#34;争斗。以下是我的建议:SQLAlchemy ORM旨在让您的生活更轻松,但要利用它,您必须使您的数据符合ORM预期。这就是我所做的,而不是与之斗争,并对最终结果非常满意。

但是,如果你需要坚持历史性的设计或改变它没有意义,那么使用ORM会带来更多的眼泪而不是喜悦,而简单的方法就是切换到更灵活的SQLAlchemy Core和宽容。