要保存多个行以及父表,可以使用事务来确保数据的一致性和完整性。以下是一个包含代码示例的解决方法:
import psycopg2
def save_data(parent_data, child_data_list):
# 连接数据库
conn = psycopg2.connect(database='your_database', user='your_user', password='your_password', host='your_host', port='your_port')
cursor = conn.cursor()
try:
# 开始事务
conn.autocommit = False
# 保存父表数据
save_parent_data(cursor, parent_data)
# 保存子表数据
for child_data in child_data_list:
save_child_data(cursor, child_data)
# 提交事务
conn.commit()
print("数据保存成功!")
except Exception as e:
# 回滚事务
conn.rollback()
print("数据保存失败:", str(e))
finally:
# 关闭数据库连接
conn.autocommit = True
cursor.close()
conn.close()
def save_parent_data(cursor, parent_data):
# 执行插入父表数据的SQL语句
sql = "INSERT INTO parent_table (column1, column2) VALUES (%s, %s)"
cursor.execute(sql, (parent_data['column1'], parent_data['column2']))
def save_child_data(cursor, child_data):
# 执行插入子表数据的SQL语句
sql = "INSERT INTO child_table (column1, column2, parent_id) VALUES (%s, %s, %s)"
cursor.execute(sql, (child_data['column1'], child_data['column2'], child_data['parent_id']))
# 测试代码
parent_data = {'column1': 'value1', 'column2': 'value2'}
child_data_list = [
{'column1': 'child_value1', 'column2': 'child_value2', 'parent_id': 1},
{'column1': 'child_value3', 'column2': 'child_value4', 'parent_id': 1}
]
save_data(parent_data, child_data_list)
上述代码中,save_data
函数接收父表数据和子表数据列表作为参数。首先,连接数据库并创建一个游标。然后,使用事务来保存数据。在事务中,先保存父表数据,再保存子表数据。如果在保存数据过程中出现异常,将回滚事务并打印错误信息。最后,提交事务并关闭数据库连接。
在测试代码中,我们传入了一个父表数据和两个子表数据作为示例数据。你可以根据自己的需求修改示例数据,然后运行代码来保存多个行以及父表数据。
上一篇:保存多个图形为SVG