SQL String выдает ошибку со специальным символом в имени столбца SQLIte - PullRequest
0 голосов
/ 20 октября 2018

У меня есть база данных SQLite.В указанной таблице существует столбец, в котором есть знак "-" / минус.Эта база данных SQLite была создана из python 3.6 с пандами (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 голосов
/ 20 октября 2018

Вот решение.Имя столбца просто нуждается в двойных кавычках, то есть внутри одинарных кавычек, так что 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...