Postgresql psycopg2 copy_from значения, окруженные кавычками [duplicate]

В MySQL есть два типа кавычек:

  1. ' для включения строковых литералов
  2. ` для включения идентификаторов, таких как имена таблиц и столбцов

И тогда есть ", который является частным случаем. Он может быть использован для one вышеупомянутых целей за раз в зависимости от сервера MySQL sql_mode :

  1. By по умолчанию символ " может использоваться для вложения строковых литералов точно так же, как '
  2. В режиме ANSI_QUOTES символ " может использоваться для заключите идентификаторы так же, как `

Следующий запрос приведет к различным результатам (или ошибкам) ​​в зависимости от режима SQL:

SELECT "column" FROM table WHERE foo = "bar"

ANSI_QUOTES disabled

Запрос будет выбирать строковый литерал "column", где column foo равен строке "bar"

ANSI_QUOTES enabled

В запросе будет выбран столбец column где столбец foo равен столбцу bar

. Когда использовать

  • , я предлагаю вам избегать использования ", чтобы ваш код не зависел от SQL mode
  • Всегда указывайте идентификаторы, так как это хорошая практика (довольно много вопросов о SO обсуждают это)

3
задан Benjamin 28 December 2013 в 21:30
поделиться

1 ответ

Кажется, что cursor.copy_from или copy_to не поддерживает котировочные листы. решение - использовать copy_expert.

import psycopg2


f_cm = open('cm.sql', 'r')

constr = "dbname='mydb' user= 'pgsql' host='127.0.0.1'"
db = psycopg2.connect(constr)
st = db.cursor()

copy = "COPY mytable(col1,col2, col3) FROM STDIN with csv"
st.copy_expert(sql=copy, file=f_cm)

db.commit()
st.close()
db.close()
5
ответ дан sharafjaffri 24 August 2018 в 19:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: