【问题标题】:Use variable in pd.read.sql [duplicate]在 pd.read.sql 中使用变量 [重复]
【发布时间】:2018-11-23 01:25:06
【问题描述】:

我在 SQL 中有数据,我想用变量而不是使用像“953381”这样的数字从中读取一些数据。不知道为什么我不能直接使用var = 9553381

df = pd.read_sql('select name, data, from sheet where name = "953381" ', conn,
                index_col=['date'], parse_dates=['date'])

【问题讨论】:

  • 使用此代码得到的错误/输出是什么?
  • DatabaseError: sql 执行失败,没有这样的列:var
  • “data”后面的多余逗号是否会导致错误?
  • 不应该,因为如果我使用数字 953381,我可以获得正确的数据。

标签: python sql pandas


【解决方案1】:

我猜这就是你要找的东西:

var =  "953381" 
df = pd.read_sql('select name, data, from sheet where name =' + var, conn,
                index_col=['date'], parse_dates=['date'])

【讨论】:

    【解决方案2】:

    这就是你要找的吗?

    var = "953381"
    df = pd.read_sql('select name, data, from sheet where name =' + var , conn,
                index_col=['date'], parse_dates=['date'])
    

    【讨论】:

    • 感谢您的建议。但它仍然找不到数据。
    • 不要使用字符串格式将 SQL 值放入查询中!这绝不是一个好主意,它打开了 SQL 注入攻击的代码,并剥夺了数据库重用优化查询的机会。使用?%s 占位符(取决于数据库驱动程序)并通过params=(x,) 将值传递给read_sql()
    【解决方案3】:

    这是.format()的情况吗?

    x = "953381"
    sql_str = 'select name, data, from sheet where name = "{}"'.format(x)
    

    【讨论】:

    • 我试过了,不是这种情况,不过谢谢你的建议!
    • 不要使用字符串格式将 SQL 值放入查询中!这绝不是一个好主意,它打开了 SQL 注入攻击的代码,并剥夺了数据库重用优化查询的机会。使用?%s 占位符(取决于数据库驱动程序)并通过params=(x,) 将值传递给read_sql()
    【解决方案4】:

    SQL 不理解双引号。使用单引号:

    x = "953381"
    query = "SELECT name, data FROM sheet WHERE name = '%s'" % x # x inside single quotes
    df = pd.read_sql(query, conn, index_col=['date'], parse_dates=['date'])
    

    【讨论】:

    • 感谢您的帮助!!!它有效!!!!
    • 不要使用字符串格式将 SQL 值放入查询中!这绝不是一个好主意,它打开了 SQL 注入攻击的代码,并剥夺了数据库重用优化查询的机会。使用?%s 占位符(取决于数据库驱动程序)并通过params=(x,) 将值传递给read_sql()
    猜你喜欢
    • 2020-09-22
    • 2020-08-22
    • 1970-01-01
    • 2019-05-18
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 2019-10-29
    相关资源
    最近更新 更多