簡體   English   中英

SQLAlchemy的; 將主鍵設置為預先存在的db表(不使用sqlite)

[英]Sqlalchemy; setting a primary key to a pre-existing db table (not using sqlite)

我在數據庫中預先存在表,我想使用自動化模式

但是,為了能夠使用此模式,您需要設置主鍵,如文檔中所示(並嘗試自己;像這樣失敗)。

sqlalchemy中是否有任何方法可以將主鍵設置為已存在的id列? (理想情況下,來自下面顯示的Users對象)。

順便說一句,我正在使用postgresql (vs sqlite 似乎不允許在創建表后設置主要內容 )。


FYI

到目前為止,我已經能夠成功訪問數據如下:

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)

但這給了我一個列表,我需要使用索引訪問值。 我想通過user.first_name = "John"通常完成的給定行的屬性(列)名稱設置值(例如,通過user.first_name = "John"語法)。

您也可以更改基礎表,從長遠來看這是正確的做法,但如果users.id的值唯一標識一行, 您可以手動指示SQLAlchemy將其作為主鍵 明確地部分處理指定類映射

Base = automap_base()

class Users(Base)
    __tablename__ = 'users'
    # Override id column, the type must match. Automap handles the rest.
    id = Column(Integer, primary_key=True)    

# Continue with the automapping. Will fill in the rest.
Base.prepare(engine, reflect=True)

使用原始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中,以這種方式添加列將自動在后續行中使用連續數字填充列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM