Проблемы с PostgreSQL после перехода с SQLite - PullRequest
0 голосов
/ 03 октября 2019

Я писал программу на Python и использовал там SQLite. Но после его развертывания понял, что я должен использовать PostgreSQL, чтобы иметь глобальную базу данных.

import os
import import psycopg2

DB_Host = os.environ['DB_Host']
DB_Database = os.environ['DB_Database']
DB_User = os.environ['DB_User']
DB_Port = os.environ['DB_Port']
DB_Password = os.environ['DB_Password']

connection = psycopg2.connect(database = DB_Database, user = DB_User, password = DB_Password, host = DB_Host, port = DB_Port)

Вот как я подключился к своей базе данных.

Теперь, в следующем коде, япопытался создать таблицу и вставить в нее что-нибудь, но эти функции не работают.

def sql_table(connection):
    cur = connection.cursor()
    cur.execute("CREATE TABLE IF NOT EXISTS tasks(id integer PRIMARY KEY, user_id integer, task text)")
    connection.commit()
    cur.close()

def sql_insert(connection, user_id, new_task):
    cur = connection.cursor()
    cur.execute("INSERT INTO tasks(user_id, task) VALUES(%s, %s)", (user_id, new_task, ))
    connection.commit()
    cur.close()

Где может быть ошибка?

1 Ответ

1 голос
/ 03 октября 2019

Я сразу вижу, что INSERT должен потерпеть неудачу, потому что он не вставляет id. Таким образом, этому столбцу будет присвоено значение NULL. Но столбец имеет значение PRIMARY KEY, следовательно, NOT NULL, что приведет к ошибке.

Если вы хотите, чтобы id генерировался автоматически, используйте

CREATE TABLE IF NOT EXISTS tasks (
   id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
   user_id integer,
   task text
)

или на более старых версиях

...
   id serial PRIMARY KEY
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...