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