Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用SQLalchemy映射MSSQL中预先存在的表的方法是什么_Python_Sql Server_Sqlalchemy - Fatal编程技术网

Python 用SQLalchemy映射MSSQL中预先存在的表的方法是什么

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

我正在使用SQLAlchemy连接MSSQL数据库,然后我想映射一个预先存在的表,并使用ORM为其创建条目。 我之所以想使用映射方法而不是创建自己的类,有两个原因,但主要原因是我需要存储XML文件,而SQLAlchemy不适合MSSQL提供的XML类型

以下是我尝试的内容以及失败原因的说明:

我正在与数据库建立连接,并通过以下方式映射表:

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。