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

Ben*_*ey4 4 python postgresql sqlalchemy

我在数据库中有预先存在的表,我想在其上使用自动映射模式

但是,为了能够使用此模式,您需要按照文档中所示设置主键(我自己也尝试过;像这样失败了)。

sqlalchemy 有什么方法可以将主键设置为已经存在的id列吗?(理想情况下来自Users如下所示的对象)。

顺便说一句,我正在使用postgresql(与 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)
Run Code Online (Sandbox Code Playgroud)

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

kli*_*lin 5

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

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

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

con.execute('alter table my_table drop id')
con.execute('alter table my_table add id serial primary key')
Run Code Online (Sandbox Code Playgroud)

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