Исходя из этого предыдущего вопроса
Я пытаюсь составить оператор вставки в Python, используя psycopg2 с некоторыми данными.Запрос прекрасно работает в консоли postgresql, но когда я пробую его из psycopg2, я получаю сообщение об ошибке.
Вот таблица, которую я хочу вставить в
create_test_table = """CREATE TABLE persons(
name VARCHAR,
age INT,
dob DATE,
sex VARCHAR);"""
Вот данные, которые я хочу вставить
d_ = {"name":"Gino", "age": "", "dob": "na", "sex": "M"}
И вот мой запрос:
cur.execute("""INSERT INTO persons (age,dob,sex,name)
VALUES (CASE WHEN cast(%(age)s as text) IN ('', '#', '-', '--', '??') THEN NULL ELSE %(age)s END,
CASE WHEN cast(%(dob)s as text) IN ('', '#', '-', '--', '??') THEN NULL ELSE %(dob)s END,
CASE WHEN cast(%(sex)s as text) IN ('', '#', '-', '--', '??') THEN NULL ELSE %(sex)s END,
CASE WHEN cast(%(name)s as text) IN ('', '#', '-', '--', '??') THEN NULL ELSE %(name)s END)""", d_)
Сообщение об ошибке:
----> 5 CASE WHEN cast(%(name)s as text) IN ('', '#', '-', '--', '??') THEN NULL ELSE %(name)s END)""", d_)
ProgrammingError: column "age" is of type integer but expression is of type text
LINE 2: VALUES (CASE WHEN cast('' as text) IN ('', '#...
^
HINT: You will need to rewrite or cast the expression.
Возможно, это не возможно сделать в psycopg2.Любая помощь будет оценена :))