我使用sqlalchemy对SQL Server数据库中的表进行更改,并希望获得受影响的行数。
我知道.rowcount
有ResultProxy
属性,但是,例如,this答案表明.rowcount
不一定与受影响的行数相同。
SQL Server使用@@ROWCOUNT
访问先前语句执行中受影响的行数。
有没有办法修改使用insert / update语句以SELECT @@ROWCOUNT
结尾的sqlalchemy表达式?
例如,给定:
from sqlalchemy import Table, Column, Integer, String, MetaData, create_engine
url = 'mssql+pyodbc://dsn'
engine = create_engine(url)
metadata = MetaData()
users = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
Column('fullname', String),
)
ins = users.insert().values(name='jack', fullname='Jack Jones')
upd1 = users.update().values(fullname='Jack Doe').where(users.c.name == 'jack')
upd2 = users.update().values(fullname='Jack Doe').where(users.c.name == 'jack')
我可以将SELECT @@ROWCOUNT
添加到update
声明中:
sel = select([text('@@ROWCOUNT')])
sql1 = sel.suffix_with(upd2)
print(sql1.compile(engine, compile_kwargs={"literal_binds": True}))
屈服"错误"查询:
SELECT @@ROWCOUNT UPDATE users SET fullname='Jack Doe' WHERE users.name = 'jack'
尝试做"对"事情:
sql2 = upd2.suffix_with(sel)
提升AttributeError
,因为'更新'对象没有属性' suffix_with'。
有没有办法获得所需的SQL查询:
UPDATE users SET fullname='Jack Doe' WHERE users.name = 'jack';
SELECT @@ROWCOUNT
使用没有完全文本结构的sql表达式语言。