Выполнение функции python в postgres - PullRequest
1 голос
/ 09 мая 2020

Я пытаюсь запустить функцию python для параметра cursor.execute, но она выдает мне эту ошибку. Я использую psycopg2

Traceback (most recent call last):
File "cliente.py", line 55, in <module>
cursorDB.execute(get_datos_animal('falsa'))
psycopg2.errors.UndefinedColumn: column "falsa" does not exist
LINE 1: ...e, clasificacion FROM animales WHERE animales.hierro = falsa

, а моя python функция - это

def get_datos_animal(hierro_v):
return "SELECT hierro, registro, nombre, fecha_nacimiento, raza, sexo, hierro_madre, hierro_padre, clasificacion FROM animales WHERE animales.hierro = " + str(hierro_v)

есть идеи, что я делаю не так?

Есть несколько функций вот так с такими же ошибками.

Ответы [ 2 ]

1 голос
/ 09 мая 2020

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

stmt = """SELECT hierro, registro, nombre, fecha_nacimiento, raza, sexo, hierro_madre, hierro_padre, clasificacion 
                 FROM animales 
                 WHERE animales.hierro = %s"""

cursor.execute(stmt, (hierro_v,))
0 голосов
/ 09 мая 2020

В postgres, если вы передаете значение без кавычек, оно будет рассматривать это как имя столбца.

Попробуйте следующее:

def get_datos_animal(hierro_v):
return "SELECT hierro, registro, nombre, fecha_nacimiento, raza, sexo, hierro_madre, hierro_padre, clasificacion FROM animales WHERE animales.hierro = '"+str(hierro_v)+"'"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...