python - 从 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()
哪里可能出错?
解决方案
我可以立即看到的一件事是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
...
推荐阅读
- c# - 如何在线程在计时器中休眠之前输出文本?
- android - 找不到参数 [com.google.gms:google-services:4.0.0] 的方法 compile()
- php - Laravel home(~) SCSS 路径无法正确解析
- python - PySpark - 从集合传递到 RDD
- grpc - gRPC Java 客户端 - 在 onNext 期间 hasNext?
- excel - 隐藏行的命名范围的VBA循环
- c++ - 编译和导出 C++ Xcode 项目?
- angularjs - Angularjs 从 DynamoDB 中获取价值
- javascript - VueJS 和 Cordova 应用程序 - 加快开发过程
- javascript - 获取修饰函数的上下文