📌  相关文章
📜  使用 Psycopg 的 Mogrify 在Python中格式化 SQL

📅  最后修改于: 2022-05-13 01:55:00.285000             🧑  作者: Mango

使用 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()函数更快。

句法:

例子:

导入 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'))