Mar*_*ese 2 python sql-server sqlalchemy
我有一个带有自动递增主键的 SQL Server 表,我正在使用 SQLAlchemy 对其进行操作。如果我创建包含主键的该表模型的实例,而不是将其保留并调用session.add(instance),SQLAlchemy 会自动SET IDENTITY_INSERT [table] ON向数据库发出消息并且插入会成功。
有没有办法自己控制这个?如果我尝试插入特定的主键而不是让它自动递增,我宁愿收到错误。如果我确实需要设置主键,我宁愿必须明确地告诉它。
这是模型:
Base = declarative_base()
class Tub(Base):
__tablename__ = 'Tub'
id = Column('ID', Integer, primary_key=True, autoincrement=True)
tare_weight = Column('TareWeight', Float(53), nullable=False)
Run Code Online (Sandbox Code Playgroud)
这是一个插入示例:
t = Tub(id=20, tare_weight=200)
session.add(t)
session.commit()
Run Code Online (Sandbox Code Playgroud)
下面是生成的 SQL:
BEGIN
SET IDENTITY_INSERT [Tub] ON
INSERT INTO [Tub] ([ID], [TareWeight]) VALUES (20, 200)
SET IDENTITY_INSERT [Tub] OFF
COMMIT
Run Code Online (Sandbox Code Playgroud)
更新:
我意识到的另一个相关情况是这样的:
t = Tub(id=20, tare_weight=200)
session.merge(t)
session.commit()
Run Code Online (Sandbox Code Playgroud)
如果数据库中已存在浴缸,我希望更新其重量。如果没有,我希望插入失败,因为它包含显式主键。
IDENTITY对于不需要默认生成的情况,请在第一个整数主键列上指定标志False:Column.autoincrementRun Code Online (Sandbox Code Playgroud)m = MetaData() t = Table('t', m, Column('id', Integer, primary_key=True, autoincrement=False), Column('x', Integer)) m.create_all(engine)
| 归档时间: |
|
| 查看次数: |
8764 次 |
| 最近记录: |