Я пытаюсь выполнить массовую вставку длинных строк XML в виде текста в базу данных postgresql 9.1. Я использую Python 3.2 и pyscopg2. Я заключаю строку XML в $$ и использую именованную переменную в строке запроса. Например:
query = "insert into cms_object_metadata (cms_object_id, cms_object_metadata_data, cms_object_metadata_type_id, \
cms_object_metadata_status_id) values ((select id from cms_objects where cms_object_ident = %(objIdent)s), \
$$%(objMetaString)s$$, (select id from cms_object_metadata_types where cms_object_metadata_type_name = 'PDAT'), \
(select id from cms_object_metadata_status where cms_object_metadata_status_name = 'active'))"
Затем я создаю объект словаря следующим образом:
dataDict = {'objIdent':objIdent, 'objMetaString':objMetaString}
передача значений objIdent и objMetaString. Я делаю вставку со следующим кодом:
dbCursor.execute(query, dataDict)
Когда он вставляет значение objMetaString в базу данных, он содержит одинарные кавычки вокруг строки. Если я добавлю значения в строку запроса и выполню вставку без именованной переменной, это не так. Например:
query = "insert into cms_object_metadata (cms_object_id, cms_object_metadata_data, cms_object_metadata_type_id, \
cms_object_metadata_status_id) values ((select id from cms_objects where cms_object_ident = %s), \
$$%s$$, (select id from cms_object_metadata_types where cms_object_metadata_type_name = 'PDAT'), \
(select id from cms_object_metadata_status where cms_object_metadata_status_name = 'active'))" % (objIdent, objMetaString)
и вставка:
dbCursor.execute(query)
Мой вопрос заключается в том, как выполнить массовую вставку больших текстовых данных с использованием именованных переменных и $$. На самом деле я не хочу, чтобы эта строка была предварительно или постобработана, если это возможно, поскольку они могут быть большими и содержать неизвестное количество одинарных кавычек или других символов, которые необходимо разделить.
Я прочитал следующую документацию и искал ответ на stackoverflow, но не нашел решения: