2015-09-07 89 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

相关问题