Ben sqlalchemy 6.0 kullanıyorum. SQL Server T-SQL lehçesi, birincil anahtarımın bir parçası olan bir tamsayıyı bir kimliğe dönüştürmek istiyor gibi görünüyor. Tamsayı alanı birincil anahtar olsaydı tamam olabilir, ama benimki bir kompozit ve bu benim için çalışmayacak. Bu davranışı bastırmak için bir yolu var mı?sqlalchemy bir IDENTITY tür yapmadan bir tamsayı parçası ile bir bileşik birincil anahtar oluşturmak mümkün mü?
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())
Sonuçlar::
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)
)