Apo*_*los 3 python mysql sqlalchemy pandas
我尝试执行以下查询
SELECT user_id, user_agent_id, requests
FROM riskanalysis_user_http_ua_stats
WHERE since>= :since AND until< :until'
Run Code Online (Sandbox Code Playgroud)
我尝试以下熊猫代码
sql = 'SELECT user_id, user_agent_id, requests ' \
'FROM riskanalysis_user_http_ua_stats ' \
'WHERE since>= :since AND until< :until'
dataframe_records = pd.read_sql_query(sql, engine,
params={'since':datetime_object,
'until':datetime_object}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
sqlalchemy.exc.ArgumentError: Could not parse rfc1738 URL from string 'SELECT user_id, user_agent_id, requests FROM riskanalysis_user_http_ua_stats WHERE since>= :since AND until< :until'
Run Code Online (Sandbox Code Playgroud)
我pymysql用作驱动程序和 MySQL 数据库。如何在 sql 查询中传递命名参数?
编辑 1:更正了参数顺序,但现在我得到以下信息
sqlalchemy.exc.ProgrammingError: (pymysql.err.ProgrammingError) (1064, u"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':since AND until< :until' at line 1") [SQL: 'SELECT user_id, user_agent_id, requests FROM riskanalysis_user_http_ua_stats WHERE since>= :since AND until< :until'] [parameters: {'since': datetime.datetime(2015, 6, 18, 0, 0, tzinfo=tzutc()), 'until': datetime.datetime(2015, 6, 18, 0, 2, tzinfo=tzutc())}]
Run Code Online (Sandbox Code Playgroud)
参数:列表、元组或字典,可选,默认值:无
传递给执行方法的参数列表。用于传递参数的语法取决于数据库驱动程序。检查您的数据库驱动程序文档,了解支持 PEP 249 的 paramstyle 中描述的五种语法样式中的哪一种。例如。对于 psycopg2,使用 %(name)s 所以使用 params={'name' : 'value'}
如果您随后查看PEP 249 的 paramstyle,您会看到许多选项。但是PyMySQL 的execute文档指出
如果 args 是列表或元组,则 %s 可用作查询中的占位符。
如果 args 是一个 dict, %(name)s 可以用作查询中的占位符。
因此,适用于您的情况,这将是:
sql = 'SELECT user_id, user_agent_id, requests ' \
'FROM riskanalysis_user_http_ua_stats ' \
'WHERE since>= %s AND until< %s'
dataframe_records = pd.read_sql_query(sql, engine,
params=(datetime_object, datetime_object))
Run Code Online (Sandbox Code Playgroud)
或者
sql = 'SELECT user_id, user_agent_id, requests ' \
'FROM riskanalysis_user_http_ua_stats ' \
'WHERE since>= %(since)s AND until< %(until)s'
dataframe_records = pd.read_sql_query(sql, engine,
params={'since':datetime_object,
'until':datetime_object})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2403 次 |
| 最近记录: |