Est-il possible d'get sqlalchemy pour créer une key primaire composite avec une partie entière sans en faire un type IDENTITY?

J'utilise sqlalchemy 6.0. Le dialecte SQL Server T-SQL semble vouloir faire tout entier qui fait partie de ma key primaire dans une identité. Cela peut être correct si le champ entier était la key primaire, mais le mien est un composite et cela ne fonctionnera pas pour moi. Existe-t-il un moyen de supprimer ce comportement?

Voici une démonstration du problème:

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.comstack() print print "MSSql dialect gets it wrong" print create.comstack(dialect=sqlalchemy.dialects.mssql.pyodbc.dialect()) 

Résultats:

 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) ) 

J'ai été mordu par le même problème. La solution consiste à append autoincrement = False au constructor de colonne de key primaire int:

 Column(u'int_part', Integer, primary_key=True, nullable=False, autoincrement=False) 

Sinon, sqlalchemy suppose qu'il devrait en faire une colonne d'identité.