首页 > 解决方案 > 如何从表 args 为 mssql 方言关闭自动增量

问题描述

是否可以使用 table args 关闭自动增量,或者只能从 args 中完成Column()?我正在从 pandas 进行批量插入,而 sqlalchemy 对我咆哮说不允许身份插入,而实际上我不想在此表上使用自动增量。

我在想可能有一个 mssql 方言选项可以作为 qwarg 使用,所以我也尝试了 mssql_identity=False 但我得到一个参数错误,msslq 不接受。

class PeopleTb(SqlAlchemyBase):
    __tablename__ = 'people_tb'
    PeopleID = sa.Column(sa.Integer, nullable=False)
    PeopleName = sa.Column(sa.Integer)
    __table_args__ = (
        sa.PrimaryKeyConstraint(PeopleID, name="people_tb_pk", autoincrement=False),
        {"schema": "ods"},
    )

标签: pythonsql-serversqlalchemy

解决方案


您可以在调用之前立即启用 IDENTITY_INSERT to_sql()

Base = declarative_base()


class PeopleTb(Base):
    __tablename__ = "people_tb"
    PeopleID = sa.Column(sa.Integer, primary_key=True)
    PeopleName = sa.Column(sa.Integer)


Base.metadata.drop_all(engine)    # for
Base.metadata.create_all(engine)  #   testing

df = pd.DataFrame([(1, 123)], columns=["PeopleID", "PeopleName"])

with engine.begin() as conn:
    conn.exec_driver_sql("SET IDENTITY_INSERT people_tb ON")
    df.to_sql("people_tb", conn, index=False, if_exists="append")

推荐阅读