gpt4 book ai didi

python - 炼金术;将主键设置为预先存在的数据库表(不使用 sqlite)

转载 作者:行者123 更新时间:2023-11-29 12:41:56 26 4
gpt4 key购买 nike

我想使用 automap pattern 数据库中预先存在的表在。

但是,要能够使用此模式,您需要按照文档中所示设置主键(并亲自尝试;失败,如 this)。

在 sqlalchemy 中是否有任何方法可以将主键设置为已经存在的 id 列?(理想情况下来自如下所示的 Users 对象).

顺便说一句,我正在使用 postgresql(与 doesn't seem to allow setting a primary after a table has been created 的 sqlite 相比)。


仅供引用

到目前为止,我已经能够成功访问数据如下:

from sqlalchemy import Table, MetaData
from sqlalchemy.orm import sessionmaker

metadata = MetaData(engine)
Users = Table('users', metadata, autoload=True)

Session = sessionmaker(bind=engine)
session = Session()
user_q = session.query(Users).filter(Users.c.id==1)

但这给了我一个列表,我需要在其中访问带有索引的值。我想按给定行的属性(列)名称设置值,就像在 sqlalchemy 中通常所做的那样(例如,通过 user.first_name = "John" 语法)。

最佳答案

使用原始 DDL 语句。如果 id 列已经是唯一的:

con = sqlalchemy.create_engine(url, client_encoding='utf8')
con.execute('alter table my_table add primary key(id)')

如果 id 列不是唯一的,您必须删除它并重新创建:

con.execute('alter table my_table drop id')
con.execute('alter table my_table add id serial primary key')

在 Postgres 中,以这种方式添加列将自动在后续行中使用连续数字填充该列。

关于python - 炼金术;将主键设置为预先存在的数据库表(不使用 sqlite),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45703143/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com