【问题标题】:Right way of creating SQL query on pandas在 pandas 上创建 SQL 查询的正确方法
【发布时间】:2014-05-09 04:26:17
【问题描述】:

截至今天(2014 年 5 月 9 日),我正在使用 pandas 开发版本。

Python docs 声明

# Never do this -- insecure!
symbol = 'RHAT'
c.execute("SELECT * FROM stocks WHERE symbol = '%s'" % symbol)

# Do this instead
t = ('RHAT',)
c.execute('SELECT * FROM stocks WHERE symbol=?', t)
print c.fetchone()

但是,据我了解,pandas 界面需要我这样做

from pandas.io import sql
eng = sqlalchemy.create_engine('sqlite:////path/to/file.db')
sql.read_sql("SELECT * FROM mytable WHERE myid = {0};".format(myid), eng)

我必须直接使用SQLAlchemy 来避免注入字符串,还是有更好的替代方案我还没有想到?

【问题讨论】:

    标签: python sql pandas


    【解决方案1】:

    Pandas 还有一个执行方法,它使用sqlite3 模块中的参数。

    sql.execute(sql, con, cur=None, params=None, flavor='sqlite')
    Execute the given SQL query using the provided connection object.
    ...
    params : list or tuple, optional
        List of parameters to pass to execute method.
    

    不幸的是,它没有read_sql 方法中的很多功能,例如parse_dates 并以DataFrame 的形式返回结果以及列名、索引等。

    编辑:

    哦,params 参数在 read_sql 方法中确实有效! :)

    【讨论】:

      猜你喜欢
      • 2011-02-16
      • 1970-01-01
      • 2015-11-12
      • 2011-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多