Converting a mysql with Nested SELECT, EXIST, SELECT NEXT clauses to a python sqlalchemy statement

StackOverflow https://stackoverflow.com/questions/22361772

문제

So i have this statement

SELECT h.usd FROM historic h, block b 
WHERE UNIX_TIMESTAMP(h.timestamp) <=b.block_nTime 
AND NOT EXISTS 
(SELECT 'NEXT' FROM 
historic h2 where h2.timestamp > h.timestamp 
AND UNIX_TIMESTAMP(h2.timestamp) <=b.block_nTime) AND b.block_id = 'id'

I'm trying to convert this to a python sqlalchemy statement - this is how far i got.

from sqlalchemy import *
from sqlalchemy.sql import func
from sqlalchemy.orm import Session

#{...}

h = alias(historic)
h2 = alias(historic)

session.query(h.c.usd).filter(
and_(h.c.timestamp <= block.c.block_nTime,   
~exists(
func.next_value(Sequence(h2.c.timestamp))
).where(
and_(h2.c.timestamp > h.c.timestamp, h2.c.timestamp <= block.c.block_nTime
) & block.c.id == block_id)))

some how i get this error as well:

sqlalchemy.exc.ArgumentError: columns argument to select() must be a Python list or other iterable

Think im not using Sequence() correctly. What may the issue be?

Thanks in advance!

도움이 되었습니까?

해결책

The error you get references the exists. Just wrap the parameter in a list and it should work:

Before: ~exists(func.next_value(Sequence(h2.c.timestamp)))
After: ~exists([func.next_value(Sequence(h2.c.timestamp))])

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top