首页 > 解决方案 > 从 SQLite 更改后 PostgreSQL 的问题

问题描述

我正在编写一个 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()

哪里可能出错?

标签: pythonpython-3.xdatabasepostgresqlsqlite

解决方案


我可以立即看到的一件事是INSERT必须失败,因为它没有插入id。因此,NULL将为该列分配一个值。但是该列是 a 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
...

推荐阅读