在pandas上创建SQL查询的正确方法

时间:2014-05-09 04:26:18

标签: python sql pandas

截至今天(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来避免注入字符串,还是有一个更好的选择我还没想过呢?

1 个答案:

答案 0 :(得分:0)

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方法中有效! :)