Задать вопрос
Ответы пользователя по тегу PostgreSQL
  • Как загрузить данные в таблицу из csv в postgres с помощью python (psycopg2)?

    @o5a
    Как и написано в ошибке, 'copy' предназначено для чтения файла с сервера.
    Варианты:

    1. Закинуть этот файл CSV на сервер и запускать так.
    2. Использовать вместо этого '\copy', она позволяет читать локальный файл, но для этого на компьютере должен быть рабочий psql.exe. Т.е. вместо прямого коннекта через psycopg написать скрипт запуска \copy с использованием локального psql
    3. Просто самому читать этот CSV в скрипте и писать в таблицу напрямую, через execute/executemany
    Ответ написан
    Комментировать
  • Как сравнить таблицы?

    @o5a
    Насколько понимаю, в этих таблицах могут совпадать 4 поля, но есть и другие поля?
    Тогда можно их соединить, но именно по этим полям:
    SELECT *
    FROM mytable1 t1, mytable2 t2
    WHERE t1.field1 = t2.field1
    AND t1.field2 = t2.field2

    и так далее для всех сравниваемых полей.
    Тогда получится результат, где строка из таблицы mytable1 совпадает со строкой mytable2 по этим указанным полям.

    Но в целом, как Вам уже говорили, идея делать это разными таблицами в корне неправильная. Если нужно было разделение по пользователю, то user_id надо было делать полем таблицы, а не создавать под пользователя отдельную таблицу.
    Ответ написан
    1 комментарий
  • Почему перестали работать postgres запрос в Python?

    @o5a
    Ругается именно на то, что внутри одного with conn запустили еще один with conn. Проверьте свой код.
    Судя по документации и гуглящимся отзывам эту ошибку стали выдавать с версии 2.9, так что возможно раньше просто запускали на более старой версии, поэтому не встречали.
    Ответ написан
    Комментировать
  • Python. Как проверить, существует ли таблица в БД?

    @o5a
    Если просто проверить наличие таблицы, то можно запросом
    select * from pg_tables where tablename = 'value_result'

    Если же нужно именно ругаться, когда таблица не создалась или когда запись не получилась, то можно использовать try .. except с отловом конкретного кода ошибки
    try:
        cursor.execute(create_table_query)
    except НужноеИсключение:
        print("таблица уже существует")

    Какие конкретно исключения используется я навскидку не знаю, можно посмотреть в документации:
    https://www.psycopg.org/docs/errors.html
    или вывести опытным путем
    except Exception as e:
        print(e)
    Ответ написан
    Комментировать
  • Как записать разные типы данных с помощью Python в таблицу SQL?

    @o5a
    Это делается через подстановку значений
    insert_query = """ INSERT INTO postgreetest_db (t1, t2, t3, t4, t5, t6, t7) VALUES (%s, %s, %s, %s, %s, %s, %s)"""
    cursor.execute(insert_query, resultat)
    Ответ написан
    7 комментариев
  • Почему ctx.guild.id возвращает None в запросе?

    @o5a
    Отсутствует fetchall(). Сам по себе cursor.execute возвращает None.
    for row in cursor.execute(...).fetchall():
    И как уже тут заметили, не надо использовать форматирование строк для подстановки параметров SQL запроса, используйте нормальный синтаксис (через %s и передачу данных), в предыдущем вопросе ведь уже приводили пример.
    Ответ написан
  • Как сделать запись значений в базу данных PostgreSQL?

    @o5a
    Синтаксис там похожий, переменные тоже можно передавать, только для подстановки используется '%s'
    cursor.execute("INSERT INTO users VALUES (%s, %s, %s, %s, %s)", (member, member.id, 0, 0, 1))
    Ответ написан
  • Как сохранить в базе данных список строк в одном поле?

    @o5a
    Правильнее будет сделать 3-ю таблицу, связывающую идентификаторы первых 2-х таблиц, чем городить в SQL базе какое-то текстовое или json поле с множеством идентификаторов.

    Не совсем понятно условие
    Чего бы не хотелось:
    Создавать связь многие-ко-многим
    , что под этим подразумевалось и почему именно не хотелось. Тем более, что судя по описанию, как раз и требуется связь многие ко многим, судя по
    Сущностям из Таблицы №2 достаточно иметь список первичных ключей из Таблицы №1, количество ключей может варьироваться в различных пределах.


    В крайнем случае, если нужна только связь 1 ко многим (идентификаторы таблицы 1 не будут дублироваться в таблице 2), можно добавить поле с указанием идентификатора из таблицы 2 в таблицу 1. Меньше работы, но менее универсально.
    Ответ написан
    2 комментария