我们以SQLAlchemy模型为例:
class Organization(Base):
__tablename__ = 'organization'
id = Column(Integer, primary_key=True)
# ... and so on...
在这种情况下,当在PostgreSQL上时,由于id
是主键,因此该模型将在创建音序器时生成,称为organization_id_seq
。
是否有可能以某种方式提取此自动生成的音序器名称(或者也可能是其他音序器详细信息),该音序器是为(Organization.id
)或Organization
类本身创建的?或者也许唯一的方法是在db中“手动”检查它?
动机不是在音序器重置实用程序中对音序器名称进行硬编码,而是使用我们在某些测试中使用的团队。
答案 0 :(得分:1)
找到这种方式:init元数据,反映特定的表,而不是迭代所有约束,找到你需要的。
from model import Model
from sqlalchemy import MetaData
m = MetaData()
m.reflect(Model.query.session.bind, only=[Model.__tablename__])
table_constraints = m.tables[Model.__tablename__].constraints
for constr in table_constraints:
# checking isinstance(constr, PrimaryKeyConstraint) can be added
for col in c.columns.values():
if col.server_default is not None and col.server_default.arg is not None:
print c.server_default.arg
# prints nextval('table_id_seq'::regclass)
UPD。 版本允许在没有迭代的情况下获取特定列的序列名称:
from model import Model
from sqlalchemy import MetaData
m = MetaData()
m.reflect(Model.query.session.bind, only=[Model.__tablename__])
sequence_name = Model.id.server_default.arg.text