Как создать таблицу в базе данных psql с помощью python?

Я запускаю этот скрипт и хочу создать таблицу, передавая значения в запросе 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()

psycopg2.errors.SyntaxError: синтаксическая ошибка в или около "(" LINE 1: CREATE TABLE IF NOT EXISTS('comp_first',

Kishan Yadav 10.12.2020 07:42

См. ответ Пиро ниже, чтобы узнать, как это сделать правильно.

Adrian Klaver 18.12.2020 21:14
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
1 843
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Здесь есть пара ошибок как в синтаксисе 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 ниже, чтобы узнать, как правильно это сделать.

Adrian Klaver 18.12.2020 21:12

Мой плохой, достаточно справедливо! Я не думал в контексте внешнего доступа к системе.

EmJay 19.12.2020 22:52

Используйте модуль psycopg2.sql для динамического составления запроса. см. https://www.psycopg.org/docs/sql.html.

Другие вопросы по теме