我正在尝试使用 Python 将数据插入到 PostgreSQL 数据库表中。我没有看到任何语法错误,但由于某种原因,我的数据没有插入到数据库中。
conn = psycopg2.connect(connection) cursor = conn.cursor() items = pickle.load(open(pickle_file,"rb")) for item in items: city = item[0] price = item[1] info = item[2] query = "INSERT INTO items (info, city, price) VALUES (%s, %s, %s);" data = (info, city, price) cursor.execute(query, data)
插入数据到 PostgreSQL 数据库时,常见的问题之一是没有提交事务。 PostgreSQL 使用事务机制,默认情况下所有的 INSERT, UPDATE 和 DELETE 操作都是在一个事务内进行的,这意味着必须显式地提交事务才能持久化数据到数据库。
INSERT
UPDATE
DELETE
请确保在循环执行插入操作后,调用 conn.commit() 提交事务。此外,处理数据库连接时最好使用 try-except-finally 结构,以便在出现错误时进行适当的错误处理,并确保关闭数据库连接。
conn.commit()
try-except-finally
以下是修改后的代码示例,包含提交事务和错误处理:
import psycopg2 import pickle # 假设你的数据库连接字符串是正确的 connection_string = "your_connection_string" pickle_file = "your_pickle_file" try: # 建立数据库连接 conn = psycopg2.connect(connection_string) cursor = conn.cursor() # 加载pickle文件中的数据 items = pickle.load(open(pickle_file, "rb")) # 循环插入数据 for item in items: city = item[0] price = item[1] info = item[2] query = "INSERT INTO items (info, city, price) VALUES (%s, %s, %s);" data = (info, city, price) cursor.execute(query, data) # 提交事务 conn.commit() except Exception as e: print(f"An error occurred: {e}") if conn: conn.rollback() # 出现错误时回滚事务 finally: if cursor: cursor.close() # 关闭游标 if conn: conn.close() # 关闭连接
psycopg2.connect(connection_string)
conn.cursor()
pickle.load
for
try-except
finally
这段代码确保数据在插入后正确提交,并在发生错误时进行回滚,以保持数据库的一致性。请确保替换 your_connection_string 和 your_pickle_file 为实际的数据库连接字符串和 pickle 文件路径。
your_connection_string
your_pickle_file