Python 有没有可能让sqlalchemy创建一个包含整数部分的复合主键,而不使其成为标识类型?

Python 有没有可能让sqlalchemy创建一个包含整数部分的复合主键,而不使其成为标识类型?,python,sql-server,sqlalchemy,Python,Sql Server,Sqlalchemy,我正在使用sqlalchemy 6.0。SQL Server T-SQL方言似乎希望将作为主键一部分的任何整数转换为标识。如果整型字段是主键,这可能没问题,但我的是复合字段,这对我不起作用。有没有办法抑制这种行为 下面是问题的演示: from sqlalchemy import * from sqlalchemy.schema import CreateTable from sqlalchemy.types import CHAR import sqlalchemy.dialects.mssql

我正在使用sqlalchemy 6.0。SQL Server T-SQL方言似乎希望将作为主键一部分的任何整数转换为标识。如果整型字段是主键,这可能没问题,但我的是复合字段,这对我不起作用。有没有办法抑制这种行为

下面是问题的演示:

from sqlalchemy import *
from sqlalchemy.schema import CreateTable
from sqlalchemy.types import CHAR
import sqlalchemy.dialects.mssql.pyodbc

metadata = MetaData()
t = Table('TEST', metadata,
    Column(u'int_part', Integer, primary_key=True, nullable=False),
    Column(u'char_part', CHAR(length=20), primary_key=True, nullable=False), 
    )
create = CreateTable(t)

print "Generic dialect gets it right"
print create.compile()
print
print "MSSql dialect gets it wrong"
print create.compile(dialect=sqlalchemy.dialects.mssql.pyodbc.dialect())
结果:

Generic dialect gets it right

CREATE TABLE "TEST" (
        int_part INTEGER NOT NULL,
        char_part CHAR(20) NOT NULL,
        PRIMARY KEY (int_part, char_part)
)



SQL Server T-SQL dialect gets it wrong

CREATE TABLE [TEST] (
        int_part INTEGER NOT NULL IDENTITY(1,1),
        char_part CHAR(20) NOT NULL,
        PRIMARY KEY (int_part, char_part)
)

我也遇到了同样的问题。解决方案是将autoincrement=False添加到int主键列构造函数:

Column(u'int_part', Integer, primary_key=True, nullable=False,
       autoincrement=False)
否则,sqlalchemy假定它应该使其成为标识列