使用 Psycopg 的 Mogrify 在Python中格式化 SQL
Python PostgreSQL 驱动程序 Psycopg 包含一个非常有用的机制,用于在Python中格式化 SQL,即 mogrify。
参数绑定后,返回查询字符串。如果您使用 execute()函数或类似的函数,返回的字符串与发送到数据库的 SQL 相同。可以对 mogrify() 使用与 execute() 相同的输入,结果将符合预期。
安装:
我们需要在Python中安装 psycopg2 模块来调用使用中的各种函数来满足要求。
句法:
pip install psycopg2
cursor.mogrify() 方法:
绑定参数后, cursor.mogrify() 方法返回一个查询字符串。如果您使用了 execute() 方法或任何类似方法,则返回的字符串与发送到数据库的字符串相同。结果字符串始终是字节字符串,这比使用 executemany()函数更快。
句法:
cur.mogrify(“INSERT INTO table_name (column) VALUES (%s, %s….)”, (value1, value2,…)(……))
例子:
导入 psycopg2 包,使用 psycopg2.connection() 方法建立与数据库的连接。 Autocommit 设置为 true 并使用 conn.cursor() 方法创建游标。在数据库中创建一个表,并使用 cursor.mogrify() 方法创建一个格式化的 SQL 以将值插入到表中。 Cursor.mogrify() 给出一个字节字符串,但我们希望它是字符串格式,因此我们只需要使用 decode('UTF-8') 技术将 mogrify 的输出解码回字符串。稍后使用 fetchall() 方法获取数据并提交更改。
Python3
# importing packages
import psycopg2
# forming connection
conn = psycopg2.connect(
database="Emp_database",
user='postgres',
password='pass',
host='127.0.0.1',
port='5432'
)
conn.autocommit = True
# creating a cursor
cursor = conn.cursor()
cursor.execute(
'create table emp_table(emp_code int,\
emp_name varchar(30), emp_salary decimal)')
# list of rows to be inserted
values = [(34545, 'samuel', 48000.0),
(34546, 'rachel', 23232),
(34547, 'Sean', 92000.0)]
# cursor.mogrify() to insert multiple values
args = ','.join(cursor.mogrify("(%s,%s,%s)", i).decode('utf-8')
for i in values)
# executing the sql statement
cursor.execute("INSERT INTO emp_table VALUES " + (args))
# select statement to display output
sql1 = '''select * from emp_table;'''
# executing sql statement
cursor.execute(sql1)
# fetching rows
for i in cursor.fetchall():
print(i)
# committing changes
conn.commit()
# closing connection
conn.close()
输出:
(34545, 'samuel', Decimal('48000.0'))
(34546, 'rachel', Decimal('23232'))
(34547, 'Sean', Decimal('92000.0'))