Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正在尝试将SQL查询转换为SQLAlchemy查询_Python_Sql_Sqlalchemy - Fatal编程技术网

Python 正在尝试将SQL查询转换为SQLAlchemy查询

Python 正在尝试将SQL查询转换为SQLAlchemy查询,python,sql,sqlalchemy,Python,Sql,Sqlalchemy,我试图将原始SQL转换为sqlalchemy查询,但到目前为止,我得到了不同的结果。我在尝试sqlalchemy时得到的结果是缺少属性对象(我得到一个带有(ListingCalendarDays,None,PricingData)的元组),因此我认为翻译中缺少了一些内容 原始查询: result = session.execute("""SELECT p.id as property_id, p.home_code, c.listing_id,

我试图将原始SQL转换为sqlalchemy查询,但到目前为止,我得到了不同的结果。我在尝试sqlalchemy时得到的结果是缺少属性对象(我得到一个带有(ListingCalendarDays,None,PricingData)的元组),因此我认为翻译中缺少了一些内容

原始查询:

   result = session.execute("""SELECT p.id as property_id,
           p.home_code,
           c.listing_id,
           c.calendar_date,
           c.available,
           ab.price
        FROM listing_calendar_days c
        LEFT JOIN properties p
            ON (p.id::integer = c.listing_id and p.id is not null and p.id <> '')
        LEFT JOIN pricing_data ab
            ON c.listing_id = ab.listing_id
            AND c.calendar_date = ab.price_date
        WHERE c.calendar_date >= '%s'
        AND c.calendar_date <= '%s' ;""" % ( now.isoformat(), end.isoformat()))

您可以打印出SQLAlchemy通过执行以下操作生成的查询

print(query)
在这种特殊情况下,
Properties
的连接条件是错误的
str(ListingCalendarDays.listing\u id)
生成文本字符串
“ListingCalendarDays.listing\u id”
,而不是转换为
varchar
的列
listing\u id
。对于强制转换,您需要构造:

cast(ListingCalendarDays.listing_id, String)
此外,您还缺少
p.id''
条件

总而言之:

and_(Properties.id == cast(ListingCalendarDays.listing_id, String),
     Properties.id != None,
     Properties.id != "")
and_(Properties.id == cast(ListingCalendarDays.listing_id, String),
     Properties.id != None,
     Properties.id != "")