Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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 SQLAlchemy参数绑定不正确_Python_Mysql_Sqlalchemy - Fatal编程技术网

Python SQLAlchemy参数绑定不正确

Python SQLAlchemy参数绑定不正确,python,mysql,sqlalchemy,Python,Mysql,Sqlalchemy,我试图使用SQLAlchemy对一些原始SQL进行一些查询绑定(由于复杂性),但它似乎没有正确绑定命名参数。运行以下代码时出现错误,如果手动编辑SQL字符串以使用设置的值,则可以正常工作: engine=create\u engine('mysql://scott:tiger@localhost/foo') VAL={ “标记id”:1, “间隔”:300, “开始时间”:datetime.datetime(2014,5,1,0,0), “结束时间”:datetime.datetime(2014

我试图使用SQLAlchemy对一些原始SQL进行一些查询绑定(由于复杂性),但它似乎没有正确绑定命名参数。运行以下代码时出现错误,如果手动编辑SQL字符串以使用设置的值,则可以正常工作:

engine=create\u engine('mysql://scott:tiger@localhost/foo')
VAL={
“标记id”:1,
“间隔”:300,
“开始时间”:datetime.datetime(2014,5,1,0,0),
“结束时间”:datetime.datetime(2014,6,1,0,0)
}
sql=“”选择
从\u UNIXTIME(CEIL(UNIX\u时间戳(事件\u时间)/:间隔)*:interval)作为伪\u时间,
平均值(值)作为平均值
从“数据点”到“双精度”`
哪里
(tag_id=:tag_id)和
(事件时间介于:开始时间和:结束时间之间)
按CEIL分组(UNIX时间戳(事件时间)/:间隔),标记id“”
结果=引擎.execute(sql,**VAL)
这将导致以下错误:

sqlalchemy.exc.ProgrammingError:(ProgrammingError)(1064,“您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以获得使用near的正确语法::interval)*:interval)作为伪时间

日志似乎表明正在传递参数:

2014-05-26 23:23:55,506 INFO sqlalchemy.engine.base.Engine SELECT
                FROM_UNIXTIME( CEIL( UNIX_TIMESTAMP( event_time ) / :interval ) * :interval ) AS pseudo_time,
                AVG( value ) AS average_value
            FROM  `data_point_double`
            WHERE
              (tag_id = :tag_id) AND
              (event_time BETWEEN :start_time AND :end_time)
            GROUP BY CEIL( UNIX_TIMESTAMP( event_time ) / :interval ), tag_id
2014-05-26 23:23:55,506 INFO sqlalchemy.engine.base.Engine {'start_time': datetime.datetime(2014, 5, 1, 0, 0), 'interval': 300, 'end_time': datetime.datetime(2014, 6, 1, 0, 0), 'tag_id': 1L}
2014-05-26 23:23:55,506 INFO sqlalchemy.engine.base.Engine ROLLBACK

我是否正确使用了命名参数,或者这是一个更大的问题?我也尝试了mysql+mysqldb作为引擎,但这也不起作用。

在发布此消息之前,我找到了解决方案,使用文本包装查询,以便:

result=engine.execute(sql,**VAL)
变成这样:

从sqlalchemy.sql导入文本
结果=engine.execute(文本(sql),**VAL)
希望带有错误消息的内容将帮助某人找到此解决方案