Команда SELECT не найдет имя столбца с двоеточием - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть скрипт Python для извлечения значения (идентификатора таблицы) из базы данных PostgreSQL.Хотя имя столбца содержит двоеточие, и я считаю, что это останавливает его работу.Я проверил это на столбцах без двоеточий, и он правильно получает идентификатор.

Строка, о которой идет речь,

cur.execute("SELECT tID from titles where name like 'METEOROLOG:WINDSPEED_F' order by structure, comp1, comp2")
rowswind=cur.fetchall()

Когда я печатаю строку строк, ничего не возвращается (только пустые скобки)

Я также пытался ..

cur.execute('SELECT tID from titles where name like "METEOROLOGY:WINDSPEED_F" order by structure, comp1, comp2')

Но это возвращается с ошибкой

psycopg2.ProgrammingError: столбец "METEOROLOGY: WINDSPEED_F" не существует

(это точно так и есть).

Я также пытался избежать двоеточия любым удобным для меня способом (т. Е. Обратным слешем), но ничего не работает, я просто получаю синтаксические ошибки.

Любой совет будет приветствоваться.Спасибо.

ДОБАВЛЕНИЕ 20190429

Я попытался параметризовать запрос, но также безуспешно.

wind=('METEOROLOGY:WINDSPEED_F')
sql="SELECT tID from titles where name like '{0}' order by structure, comp1, comp2".format(wind)

Я пробовал много разных комбинаций двойного и одиночногоцитаты, чтобы попытаться избежать двоеточия безуспешно.

1 Ответ

0 голосов
/ 29 апреля 2019

psycopg2.ProgrammingError: столбец "METEOROLOGY: WINDSPEED_F" не существует

Вы получаете эту ошибку, потому что вы используете двойные кавычки вокруг целевого значения в вашем запросе WHERE оператор, здесь:

cur.execute('SELECT tID from titles where name like "METEOROLOGY:WINDSPEED_F" order by structure, comp1, comp2')

Здесь вы получите 0 результатов:

cur.execute("SELECT tID from titles where name like 'METEOROLOG:WINDSPEED_F' order by structure, comp1, comp2")

, поскольку существует 0 строк со значением "METEOROLOG: WINDSPEED_F" в столбце name, Это может быть просто из-за неправильного написания МЕТЕОРОЛОГИИ.

То, как вы используете LIKE, вы также можете использовать =.LIKE замечательно, если вы собираетесь использовать % для поиска других значений , таких как , это значение.

Пример:

SELECT * 
FROM
    TABLE 
WHERE
    UPPER(NAME) LIKE 'JOSH%'

Это вернет результатыдля этих значений в name: JOSHUA, JoShUa, Joshua, Josh, JOSH.Если бы я набрал NAME LIKE 'JOSH', то я нашел бы результаты только для точного значения JOSH.

Так как вы устанавливаете значение всеми заглавными буквами в вашем WHERE, попробуйте добавить UPPER()на ваш запрос, как это:

cur.execute("SELECT tID from titles where UPPER(name) like 'METEOROLOG:WINDSPEED_F' order by structure, comp1, comp2")
...