如何在 SQLalchemy 中对二进制值执行按位运算?
How do I perform bitwise operations on binary values in SQLalchemy?
SQLAlchemy 文档建议程序可以通过简单地使用 op
函数访问 sql 的按位运算符,例如 expression.op('&')(0x04)
。但是,当我将它用于二进制值时,我得到了异常结果:
with Session(engine) as sess:
stmt = select(table.c.myvarbinary.op('&')(myBytes))
result = sess.execute(stmt).fetchone()
print(x[0])
打印b''
如果我绕过 SQLAlchemy 的 api,运算符可以正常工作:
with Session(engine) as sess:
stmt = text(f'SELECT myvarbinary & {myBytes.hex()} FROM table;')
result = sess.execute(stmt).fetchone()
print(x[0])
打印b'[expected result]'
我不知道这可能是什么原因。我连接的数据库使用 MySQL.
问题是我的数据库没有将传入的字节正确解释为字节串;我能够通过向语句显式添加 CAST 来解决问题。
stmt = select(table.c.myvarbinary.op('&')(cast(myBytes, types.LargeBinary))
SQLAlchemy 文档建议程序可以通过简单地使用 op
函数访问 sql 的按位运算符,例如 expression.op('&')(0x04)
。但是,当我将它用于二进制值时,我得到了异常结果:
with Session(engine) as sess:
stmt = select(table.c.myvarbinary.op('&')(myBytes))
result = sess.execute(stmt).fetchone()
print(x[0])
打印b''
如果我绕过 SQLAlchemy 的 api,运算符可以正常工作:
with Session(engine) as sess:
stmt = text(f'SELECT myvarbinary & {myBytes.hex()} FROM table;')
result = sess.execute(stmt).fetchone()
print(x[0])
打印b'[expected result]'
我不知道这可能是什么原因。我连接的数据库使用 MySQL.
问题是我的数据库没有将传入的字节正确解释为字节串;我能够通过向语句显式添加 CAST 来解决问题。
stmt = select(table.c.myvarbinary.op('&')(cast(myBytes, types.LargeBinary))