使用SQLAlchemy从SQL Server返回受影响的行数

时间:2018-02-21 09:10:10

标签: python sql-server sqlalchemy

我使用sqlalchemy对SQL Server数据库中的表进行更改,并希望获得受影响的行数。

我知道.rowcountResultProxy属性,但是,例如,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表达式语言。

0 个答案:

没有答案