【发布时间】:2019-09-07 05:49:50
【问题描述】:
我有一个相对复杂的 sql 语句,我想用 sqlalchemy ORM 执行。但是当我尝试这样做时,我总是收到错误{NoSuchColumnError}"Could not locate column in row for column 'transaction_out.value'"。我的sql语句如下:
sql = """
Select
addresses.address,
transaction_out1.value As sent,
transaction_out1.transaction_id As sent_id,
transactions.block As block_sent,
transactions.time As time_sent,
transactions.txid As txid_sent,
"sent" as type
From
transaction_out INNER Join
transaction_out_address On transaction_out_address.transaction_out_id = transaction_out.id INNER Join
addresses On transaction_out_address.address_id = addresses.id INNER Join
transaction_in On transaction_in.transaction_out_id = transaction_out.id INNER Join
transactions On transaction_in.transaction_id = transactions.id INNER Join
transaction_out transaction_out1 On transaction_out1.transaction_id = transactions.id INNER Join
transactions transactions1 On transaction_out.transaction_id = transactions1.id
WHERE addresses.address=:address_string
UNION
Select
addresses.address,
transaction_out.value As received,
transaction_out.transaction_id As received_id,
transactions.block As received_block,
transactions.time As received_time,
transactions.txid As received_txid,
"received"
From
transaction_out LEFT Join
transaction_out_address On transaction_out_address.transaction_out_id = transaction_out.id LEFT Join
addresses On transaction_out_address.address_id = addresses.id LEFT Join
transaction_in On transaction_in.transaction_out_id = transaction_out.id LEFT Join
transactions On transaction_out.transaction_id = transactions.id
WHERE addresses.address=:address_string
"""
我尝试通过以下方式执行语句:
query = session.query(Address.address, TransactionOut.value, TransactionOut.id, Block.height, Transaction.time, Transaction.txid).from_statement(
stmt.bindparams(
bindparam("address_string",
value=address_string)
))
我可以使用 engine.execute() 执行原始 sql 语句而不会出现任何问题,但我需要使用 session.query() 执行此操作,因此我可以使用 sqlalchemy-datatables。我的数据库看起来或多或少像这里的数据库:https://dba.stackexchange.com/questions/137791/blockchain-bitcoin-as-a-database/137800#137800。
我尝试执行它的方式有什么问题?
【问题讨论】:
-
您是否尝试直接对数据库运行查询?看起来像一个 SQL 错误
-
@kjmerf 是的,我又试了一次。它从 mysql 控制台运行得非常好。
-
打开引擎登录 (
echo=True) 并检查您知道有效的查询与 sqlalchemy 生成的查询之间的差异。 -
@IljaEverilä 我怎样才能让它别名?
标签: python sqlalchemy