【发布时间】:2017-10-31 08:07:54
【问题描述】:
假设我要创建以下三个表:
a = db.Table(
'a', metadata,
db.Column('id', db.Integer, nullable=False, primary_key=True),
db.Column('created', server_default=func.now()),
db.Column('updated', server_default=func.now(), onupdate=func.current_timestamp()),
db.Column('unique_to_a', db.INTEGER, nullable=True)
)
b = db.Table(
'b', metadata,
db.Column('id', db.Integer, nullable=False, primary_key=True),
db.Column('created', server_default=func.now()),
db.Column('updated', server_default=func.now(), onupdate=func.current_timestamp()),
db.Column('unique_to_b', db.INTEGER, nullable=True)
)
c = db.Table(
'c', metadata,
db.Column('id', db.Integer, nullable=False, primary_key=True),
db.Column('created', server_default=func.now()),
db.Column('updated', server_default=func.now(), onupdate=func.current_timestamp()),
db.Column('a_id', db.Integer, db.ForeignKey('a.id'), index=True, nullable=True),
db.Column('unique_to_c', db.INTEGER, nullable=True)
)
这三个列(id、created 和 updated)之间有共同的列,并且每个列都有唯一的列。
有没有一种简单的方法可以创建一个可以包含所有共享列的基表?
例如像
base_table = db.Table(
'base', metadata,
db.Column('id', db.Integer, nullable=False, primary_key=True),
db.Column('created', server_default=func.now()),
db.Column('updated', server_default=func.now(), onupdate=func.current_timestamp()),
)
a = db.Table(
'a', metadata,
base_table,
db.Column('unique_to_a', db.INTEGER, nullable=True)
)
我们更愿意在 SQLAlchemy Core 中完成这一切(即不使用 ORM)。
我们之前使用过deepcopy (from copy import deepcopy),但我们认为必须有更好的方法在表之间共享列。
【问题讨论】:
-
对不起,这周很忙,所以我没有机会测试它。明天试试!
-
似乎工作,谢谢
标签: python postgresql python-3.x sqlalchemy