2015-09-07 39 views
1

我有問題。 我已經創建了這段代碼來在sql server上創建一個具有標識的列,但是這個列不是主鍵。 在sqlalchemy這是很難,但我試着用這個代碼,它的工作。創建列不是主鍵但在sqlalchemy上爲sql服務器標識

def change_pk(table, sql_table_name, list_pk_column): 
    str_pk_column = "" 
    for item in list_pk_column: 
     str_pk_column += item + "," 
    str_pk_column = str_pk_column[:-1] 
    event.listen(table, 'after_create', 
      DDL("""ALTER TABLE {0} DROP CONSTRAINT {0}_id; 
       ALTER TABLE {0} ADD CONSTRAINT {0}_un_id UNIQUE (id); 
       ALTER TABLE {0} ADD CONSTRAINT {0}_pk PRIMARY KEY ({1})""".format(sql_table_name,str_pk_column))) 

msg_users = sa.Table("Msg_Users", 
        metadata, 
        sa.Column("id", 
           sa.Integer, 
           info={}), 
        sa.Column("name", 
           sa.Unicode(50), 
           nullable=False, 
           info={}), 
        sa.Column("mobile", 
           sa.Unicode(15), 
           info={}), 
        sa.Column("email", 
           sa.Unicode(80), 
           info={}), 
        sa.Column("last_update", 
           sa.DateTime, 
           server_default=sa.func.current_timestamp(), 
           server_onupdate=sa.func.current_timestamp(), 
           info={}), 
        sa.PrimaryKeyConstraint('id', name="Msg_Users_id"), 
        info={}, 
        autoload=aload) 
change_pk(msg_users, "Msg_Users", ["name"]) 

你知道是否有一種方法更簡單嗎?

感謝的

+0

我不跟着他們的問題,使用'sa.PrimaryKeyConstraint('id')'生成的主鍵有什麼問題? –

+0

可能有誤解。我會嘗試以更好的方式解釋我的問題。我需要有「名稱」作爲主鍵和「ID」作爲標識列(它不是主鍵)。問題是我不知道如何使用sqlalchemy來完成它。我試着把auto_increment放在「id」上,但它不起作用。 –

回答

0

翻翻方言代碼和檢查documentation這似乎並不可能之後。

你可以試試這個:

from sqlalchemy import Table, Integer, Sequence, Column, Unicode 

Table('test', metadata, 
    Column('id', Integer, Sequence('some_sequence')), 
    Column('name', Unicode(80), primary_key=True)).create(some_engine) 

但是從文檔它不應該工作:

SQL Server提供使用 IDENTITY構造所謂的「自動遞增」行爲,這可以置於一個整數主鍵上。 SQLAlchemy在其默認「自動增量」 行爲內考慮IDENTITY,在Column.autoincrement中描述;這意味着,通過 默認情況下,在表中的第一個整數主鍵列將 認爲是標識列,並且將生成DDL這樣:

http://docs.sqlalchemy.org/en/rel_1_0/dialects/mssql.html#auto-increment-behavior

相關問題