Python 用SQLalchemy映射MSSQL中预先存在的表的方法是什么
我正在使用SQLAlchemy连接MSSQL数据库,然后我想映射一个预先存在的表,并使用ORM为其创建条目。 我之所以想使用映射方法而不是创建自己的类,有两个原因,但主要原因是我需要存储XML文件,而SQLAlchemy不适合MSSQL提供的XML类型 以下是我尝试的内容以及失败原因的说明: 我正在与数据库建立连接,并通过以下方式映射表:Python 用SQLalchemy映射MSSQL中预先存在的表的方法是什么,python,sql-server,sqlalchemy,Python,Sql Server,Sqlalchemy,我正在使用SQLAlchemy连接MSSQL数据库,然后我想映射一个预先存在的表,并使用ORM为其创建条目。 我之所以想使用映射方法而不是创建自己的类,有两个原因,但主要原因是我需要存储XML文件,而SQLAlchemy不适合MSSQL提供的XML类型 以下是我尝试的内容以及失败原因的说明: 我正在与数据库建立连接,并通过以下方式映射表: engine = create_engine(conn_str, echo=True) Base= declarative_base() class MyC
engine = create_engine(conn_str, echo=True)
Base= declarative_base()
class MyClass(Base):
__table__ = Table('my_table_name', Base.metadata, autoload=True, autoload_with=engine)
class MyClass(Base):
__table__ = Table('my_table_name', Base.metadata, autoload=True, autoload_with=engine)
__mapper_args__ = {
'primary_key':[Table('my_table_name', Base.metadata, autoload=True, autoload_with=engine).c.Id,]
}
执行时会引发异常:
sqlalchemy.exc.ArgumentError: Mapper mapped class MyClass->my_table_name could not assemble any primary key columns for mapped table 'my_table_name'
在Microsoft SSMS应用程序中检查表时,任何列中都没有“主键”,这很奇怪。我检查了每一列,发现列“Id”是IDENTITY列,我猜这是用作PK的
我在google和stackoverflow中阅读了一些文章,发现我可以使用mapper参数设置主键:
engine = create_engine(conn_str, echo=True)
Base= declarative_base()
class MyClass(Base):
__table__ = Table('my_table_name', Base.metadata, autoload=True, autoload_with=engine)
class MyClass(Base):
__table__ = Table('my_table_name', Base.metadata, autoload=True, autoload_with=engine)
__mapper_args__ = {
'primary_key':[Table('my_table_name', Base.metadata, autoload=True, autoload_with=engine).c.Id,]
}
这工作正常,在执行代码时没有异常。我尝试使用新映射类创建表条目:
new_entry = MyClass(
Id = 9999,
... all other not null objects
)
Session = sessionmaker(bind=engine)
session = Session()
session.add(new_entry)
session.commit()
session.close()
我得到以下例外情况:
Cannot insert explicit value for identity column in table 'my_table_name' when
IDENTITY_INSERT is set to OFF. (544) (SQLExecDirectW)")
我删除了新_条目的“Id”列,但无论我填充或删除了哪些列,都会得到相同的错误。你知道我做错了什么吗?看看这个错误,你不是在使用MySQL,而是在使用MS SQL Server。看看这个错误,你不是在使用MySQL,而是在使用MS SQL Server。