摘要
:本教程逐步向您展示如何使用 Python 将一行或多行插入到 PostgreSQL 表中。
将一行插入 PostgreSQL 表的步骤
在 Python 中要将行插入到 PostgreSQL 表中,请使用以下步骤:
首先,通过调用
psycopg
模块的
connect()
函数
连接到 PostgreSQL 数据库服务器
。
conn = psycopg2.connect(dsn)
该
connect()
函数返回一个
connection
类的新实例。
接下来,通过调用该
connection
对象的
cursor()
方法来创建一个新的
cursor
对象。
然后,通过使用输入值调用
cursor
对象的
execute()
方法,执行
INSERT
语句。
cur.execute(sql, (value1,value2))
您将该
INSERT
语句作为第一个参数传递给
execute()
方法,并将值列表作为第二个参数传递给该方法。
如果表的
主键
是
序列
或
标识列
,则可以在插入行后获取生成的 ID。
为此,您可以使用
INSERT
语句中的
RETURNING id
子句。调用
execute()
方法后,调用
cursor
对象的
fetchone()
方法来获取
id
值,如下所示:
之后,调用该
connection
对象的
commit()
方法将更改永久保存到数据库中。
如果忘记调用该
commit()
方法,
psycopg2
将不会对表进行任何更改。
最后,通过调用
cursor
和
connection
对象的
close()
方法,关闭与 PostgreSQL 数据库服务器的连接。
将一行插入 PostgreSQL 表的示例
为了演示,我们将使用我们在
创建表教程
中创建的
suppliers
数据库中的
vendors
表。
以下
insert_vendor()
函数将新行插入
vendors
表中并返回新生成的
vendor_id
值。
#!/usr/bin/python
import psycopg2
from config import config
def insert_vendor(vendor_name):
""" insert a new vendor into the vendors table """
sql = """INSERT INTO vendors(vendor_name)
VALUES(%s) RETURNING vendor_id;"""
conn = None
vendor_id = None
try:
# read database configuration
params = config()
# connect to the PostgreSQL database
conn = psycopg2.connect(**params)
# create a new cursor
cur = conn.cursor()
# execute the INSERT statement
cur.execute(sql, (vendor_name,))
# get the generated id back
vendor_id = cur.fetchone()[0]
# commit the changes to the database
conn.commit()
# close communication with the database
cur.close()
except (Exception, psycopg2.DatabaseError) as error:
print(error)
finally:
if conn is not None:
conn.close()
return vendor_id
将多行插入 PostgreSQL 表的示例
向表中插入多行的步骤与插入一行的步骤类似,只不过在第三步中,您调用的是
cursor
对象的
executemany()
方法,而不是调用
execute()
方法。
例如,以下
insert_vendor_list()
函数将多行插入
vendors
表中。
def insert_vendor_list(vendor_list):
""" insert multiple vendors into the vendors table """
sql = "INSERT INTO vendors(vendor_name) VALUES(%s)"
conn = None
try:
# read database configuration
params = config()
# connect to the PostgreSQL database
conn = psycopg2.connect(**params)
# create a new cursor
cur = conn.cursor()
# execute the INSERT statement
cur.executemany(sql,vendor_list)
# commit the changes to the database
conn.commit()
# close communication with the database
cur.close()
except (Exception, psycopg2.DatabaseError) as error:
print(error)
finally:
if conn is not None:
conn.close()
要测试
insert_vendor()
和
insert_vendor_list()
函数,您可以使用以下代码片段:
if __name__ == '__main__':
# insert one vendor
insert_vendor("3M Co.")
# insert multiple vendors
insert_vendor_list([
('AKM Semiconductor Inc.',),
('Asahi Glass Co Ltd.',),
('Daikin Industries Ltd.',),
('Dynacast International Inc.',),
('Foster Electric Co. Ltd.',),
('Murata Manufacturing Co. Ltd.',)
在本教程中,您学习了从 Python 程序向 PostgreSQL 表插入一行或多行的步骤。