Я запускаю этот скрипт и хочу создать таблицу, передавая значения в запросе psql с использованием переменных. Итак, я могу создать несколько таблиц за один раз. Но эта строка cur.execute("CREATE TABLE IF NOT EXISTS(%s, %s)",[table_name, comp_schema])
выдает ошибку. Как я могу написать этот запрос для создания таблицы с заданной схемой?
import psycopg2
conn = psycopg2.connect(database = "review_check", user = "xxx", password = "xxx",)
cur = conn.cursor()
print ("Opened database successfully")
comp_schema = """
as_of_date DATE PRIMARY KEY NOT NULL,
verified_reviews INTEGER,
lsa_total_reviews INTEGER
"""
table_name = 'comp_first'
cur.execute("CREATE TABLE IF NOT EXISTS(%s, %s)",[table_name, comp_schema])
conn.commit()
conn.close()
См. ответ Пиро ниже, чтобы узнать, как это сделать правильно.
Здесь есть пара ошибок как в синтаксисе SQL, так и в Python:
cur.execute("CREATE TABLE IF NOT EXISTS(%s, %s)",[table_name, comp_schema])
должно быть
cur.execute("CREATE TABLE IF NOT EXISTS %s (%s)"%(table_name, comp_schema))
Во время разработки может быть проще сначала создать запрос в отдельной переменной, а затем распечатать его, чтобы увидеть, правильно ли он выглядит:
test = "CREATE TABLE IF NOT EXISTS %s (%s)"%(table_name, comp_schema)
print(test)
>>CREATE TABLE IF NOT EXISTS comp_first (
as_of_date DATE PRIMARY KEY NOT NULL,
verified_reviews INTEGER,
lsa_total_reviews INTEGER
)
Пожалуйста, не поощряйте использование композиции строк для создания динамических запросов. Это путь к SQL
инъекции. См. ответ @piro ниже, чтобы узнать, как правильно это сделать.
Мой плохой, достаточно справедливо! Я не думал в контексте внешнего доступа к системе.
Используйте модуль psycopg2.sql
для динамического составления запроса. см. https://www.psycopg.org/docs/sql.html.
psycopg2.errors.SyntaxError: синтаксическая ошибка в или около "(" LINE 1: CREATE TABLE IF NOT EXISTS('comp_first',