【问题标题】:DatabaseError: The first argument to execute must be a string or unicode query in pythonDatabaseError:要执行的第一个参数必须是python中的字符串或unicode查询
【发布时间】:2015-06-24 06:41:31
【问题描述】:

我正在尝试将从日期选择器中选择的日期返回到我的 python 代码中的 sql 查询中。我还尝试使用 encode(utf-8) 删除 unicode 字符串,但仍然出现错误。

我是 python 新手。谁能帮我弄清楚如何解决这个问题?我正在使用 python flask 来创建网页

if request.method=='POST':
        dateval2 = request.form['datepick']
        dateval = dateval2.encode('utf-8')
    result = ("SELECT * FROM OE_TAT where convert(date,Time_IST)='?'",dateval
    df = pd.read_sql_query(result,connection)`

错误

pandas.io.sql.DatabaseError
DatabaseError: Execution failed on sql '("SELECT * FROM OE_TAT where convert(date,Time_IST)='?'", '2015-06-01')': The first argument to execute must be a string or unicode query.

【问题讨论】:

  • 日期选择器中的日期采用哪种格式?
  • 格式:"yy-mm-dd" 和我的sql server 数据库格式一样
  • 这是我得到的确切错误:pandas.io.sql.DatabaseError DatabaseError: Execution failed on sql '("SELECT * FROM OE_TAT where convert(date,Time_IST)='?'", '2015-06-02')':执行的第一个参数必须是字符串或 unicode 查询。
  • 您正在向read_sql_query 提供一个元组,而第一个参数(查询)必须是一个字符串

标签: html sql-server python-2.7 pandas flask


【解决方案1】:

您正在向read_sql_query 提供一个元组,而第一个参数(查询)必须是一个字符串。这就是为什么它给出错误“要执行的第一个参数必须是字符串或 unicode 查询”。

你可以这样传递参数:

result = "SELECT * FROM OE_TAT where convert(date,Time_IST)=?"
df = pd.read_sql_query(result, connection, params=(dateval,))

注意?的使用取决于你使用的驱动(有不同的方式来指定参数,见https://www.python.org/dev/peps/pep-0249/#paramstyle)。您可能必须使用%s 而不是?

您也可以预先格式化字符串,例如result = "SELECT * FROM OE_TAT where convert(date,Time_IST)={0}".format(dateval),但是不建议这样做,请参阅例如here

【讨论】:

    猜你喜欢
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    • 2019-05-14
    • 2018-09-14
    相关资源
    最近更新 更多