我正在用 python 制作一个脚本,每次运行时都会重新启动,因为我想确保删除数据库和表并重新创建它们。 我正在关注本教程:https://www.fullstackpython.com/blog/postgresql-python-3-psycopg2-ubuntu-1604.html 但是 matt 作为用户 a 做了 osboxes,但是当我尝试创建表时,我收到已经存在的错误,如果我之前删除了数据库,那怎么可能?
# connect to postgres
connection = psycopg2.connect(dbname="postgres", user="osboxes", password="osboxes.org", host="localhost")
connection.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)
cursor = connection.cursor()
# create database to work on
name_database = "image_comparation"
cursor.execute("DROP DATABASE IF EXISTS {0};".format(name_database))
cursor.execute("CREATE DATABASE {0};".format(name_database))
name_table = "IMAGES"
cursor.execute("DROP TABLE IF EXISTS {0};".format(name_table))
# here is the issue, never creates the table
try:
# cursor.execute("DROP TABLE IF EXISTS {0};".format(name_table))
create_table_query = """CREATE TABLE {0} (IMAGE_PATH TEXT NOT NULL, IN_PROGRESS BOOLEAN, COMPLETED BOOLEAN, TIME_PROCESS REAL, CREATED_TIME timestamp, MATCHES TEXT NULL, MOVED BOOLEAN);""".format(name_table)
cursor.execute(create_table_query)
connection.commit()
except psycopg2.DatabaseError as e:
print(f'Error {e}')
错误关系“图像”已存在
我第一次运行脚本时,告诉我关系已经存在,所以我认为该表在某种程度上是持久的,所以我检查了cmd
psql (12.3 (Ubuntu 12.3-1.pgdg18.04+1), server 12.2 (Ubuntu 12.2-4))
Type "help" for help.
image_db=> \dt
Did not find any relations.
image_db=>
然后我手动将创建表查询复制到 psql 中并且工作正常。我错过了什么?
您正在登录默认数据库“postgres”,将其视为主数据库,保存有关 postgre 中发生的所有其他事情的信息, 然后你创建一个新的数据库, 但是您需要创建与该基础的另一个连接才能切换到它,现在您正在“主”数据库中创建一个表, 添加
connection = psycopg2.connect(dbname="image_comparation", user="osboxes", password="osboxes.org", host="localhost")
切换到该数据库,然后创建故事。
我突然开始在创建表格时遇到麻烦。我发现我忘记包含提交声明。尝试修改您的连接(下面适用于 Python):
conn.autocommit = True
或添加
conn.commit()
。