#python #postgresql #psycopg2
#python #postgresql #psycopg2
Вопрос:
Я пытаюсь обновить массив в массиве в столбце. Однако psycopg2 продолжает выдавать ошибки, и я понятия не имею, почему это утверждение выдает подобные ошибки.
Код:
lastUpload = "tgpx60236wa"
print(search.execute()["items"][0]["contentDetails"]["upload"]["videoId"])
connect = psycopg2.connect(host = loadConfig()["host"], database = loadConfig()["database"], user = loadConfig()["user"], password = loadConfig()["password"])
cursor = connect.cursor()
cursor.execute(f"SELECT youtube_channels[{channels.index(channel)}][1] FROM youtubeChannels WHERE guild_id = {guild[0]}")
print(cursor.fetchone()[0])
cursor.execute(f"UPDATE youtubeChannels SET youtube_channels[{channels.index(channel)}] = {lastUpload} WHERE guild_id = {guild[0]} RETURNING youtube_channels;")
connect.commit()
print(cursor.fetchone()[0])
cursor.close()
connect.close()
Вывод:
cursor.execute(f"UPDATE youtubeChannels SET youtube_channels[{channels.index(channel)}] = {lastUpload} WHERE guild_id = {guild[0]} RETURNING youtube_channels;")
psycopg2.errors.UndefinedColumn: column "tgpx60236wa" does not exist
LINE 1: UPDATE youtubeChannels SET youtube_channels[0] = tgpx60236wa...
Я даже не знаю, что должна означать эта ошибка, но я просто не знаю, что я здесь делаю не так.
Комментарии:
1. Большинству людей не нравится горизонтальная прокрутка.
2. Прямо сейчас вам, похоже, не хватает одинарных кавычек в запросе вокруг
{lastUpload}
. Вы должны использовать подготовленные инструкции, чтобы вам больше не нужно было беспокоиться об этом.
Ответ №1:
Это потому, что вы не должны сообщать параметры в запросах psycopg2 с использованием f-строк. Параметры запроса должны передаваться в качестве аргументов execute
метода и использовать заполнители для замены, что-то вроде этого:
lastUpload = "tgpx60236wa"
print(search.execute()["items"][0]["contentDetails"]["upload"]["videoId"])
connect = psycopg2.connect(host = loadConfig()["host"], database = loadConfig()["database"], user = loadConfig()["user"], password = loadConfig()["password"])
cursor = connect.cursor()
cursor.execute("SELECT youtube_channels[%s][1] FROM youtubeChannels WHERE guild_id = %s", channels.index(channel), guild[0])
print(cursor.fetchone()[0])
cursor.execute("UPDATE youtubeChannels SET youtube_channels[%s] = %s WHERE guild_id = %s RETURNING youtube_channels;", channels.index(channel), lastUpload, guild[0])
connect.commit()
print(cursor.fetchone()[0])
cursor.close()
connect.close()
Обратите внимание, что это не единственный способ передать параметры sql-запросу. Я предлагаю вам углубиться в документацию, чтобы лучше понять.