В MySQL есть два типа кавычек:
'
для включения строковых литералов `
для включения идентификаторов, таких как имена таблиц и столбцов И тогда есть "
, который является частным случаем. Он может быть использован для one вышеупомянутых целей за раз в зависимости от сервера MySQL sql_mode
:
"
может использоваться для вложения строковых литералов точно так же, как '
ANSI_QUOTES
символ "
может использоваться для заключите идентификаторы так же, как `
SELECT "column" FROM table WHERE foo = "bar"
Запрос будет выбирать строковый литерал "column"
, где column foo
равен строке "bar"
В запросе будет выбран столбец column
где столбец foo
равен столбцу bar
"
, чтобы ваш код не зависел от SQL mode Кажется, что 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()