SQL字符串在SQLIte列名称中引发带有特殊字符的错误

时间:2018-10-20 10:09:14

标签: python pandas sqlite sqlalchemy escaping

我有一个SQLite数据库。在所述表中,存在一列带有“-” /减号的列。这个SQLite数据库是使用python 3.6和pandas(SQLAlchemy作为引擎)创建的。该表和此列的创建没有问题。但是,当我要在该表上构建查询时,我不知道如何转义“-”字符。这是一个简短的示例:

#imports
import numpy as np
import pandas as pd
from sqlalchemy import create_engine

#create df
df = pd.DataFrame(np.random.rand(10,2),columns=['Column1','Prob-Column'])
# create engine to connect to db
engine = create_engine('sqlite://')
#create table in db
df.to_sql('my_table',engine,if_exists='replace')

# variables
vals = '(?)'
fil = ('key',)

# create sql string
sq = 'SELECT * FROM {t} WHERE {c1} IN {vals} GROUP BY {c2}'\
.format(t='my_table',c1='Column1',c2='Prob-Column',vals = vals)

#write query to pandas df
df = pd.read_sql_query(sq,engine,params=(fil))

跟踪如下:

OperationalError: (sqlite3.OperationalError) no such column: Prob [SQL: 'SELECT * FROM my_table WHERE Column1 IN (?) GROUP BY Prob-Column'] [parameters: ('key',)] (Background on this error at: http://sqlalche.me/e/e3q8)    

1 个答案:

答案 0 :(得分:1)

这是解决方案。列名仅需在其周围加上双引号,即在单引号内使c2 ='“ Prob-Column”'。无论如何希望这对别人有帮助。

#imports
import numpy as np
import pandas as pd
from sqlalchemy import create_engine

#create df
df = pd.DataFrame(np.random.rand(10,2),columns=['Column1','Prob-Column'])
# create engine to connect to db
engine = create_engine('sqlite://')
#create table in db
df.to_sql('my_table',engine,if_exists='replace')

# variables
vals = '(?)'
fil = ('key',)

# create sql string
sq = 'SELECT * FROM {t} WHERE {c1} IN {vals} GROUP BY {c2}'\
.format(t='my_table',c1='Column1',c2='"Prob-Column"',vals = vals)

#write query to pandas df
df = pd.read_sql_query(sq,engine,params=(fil))