原文链接: python 借助pymysql操作MySQL及占位符问题
在python3中,主要借助pymysql进行MySQL操作,简单记录下基本的操作步骤:
操作流程一般分为3步:
- 建立数据库连接
- 执行操作(查询、插入、更新、删除等)
- 关闭连接
代码
import pymysql
# 数据库连接
def connect():
conn = pymysql.connect(host='localhost',
port=3306,
user='root',
password='root',
database='root',
charset='utf8')
# 获取操作游标
cursor = conn.cursor()
return {"conn": conn, "cursor": cursor}
在执行操作时,借助游标方法: cursor.execute() 执行SQL操作。
# 1、查询操作并打印结果
def select_sql(table):
connection = connect()
conn, cursor = connection['conn'], connection['cursor']
sql = "select * from %s" % table
try:
cursor.execute(sql)
results = cursor.fetchall()
print(results)
except Exception as e:
raise e
finally:
cursor.close()
conn.close()
# 插入操作
def insert_sql(persons_values):
connection = connect()
conn, cursor = connection['conn'], connection['cursor']
keys = ", ".join(persons_values.keys())
qmark = ", ".join(["%s"] * len(persons_values))
sql_insert = "insert into persons(%s) values (%s)" % (keys, qmark)
print(sql_insert)
try:
cursor.execute(sql_insert, list(persons_values.values()))
conn.commit()
print("插入成功")
except Exception as e:
print(e)
conn.rollback()
print("插入失败")
finally:
cursor.close()
conn.close()
# 利用字典进行插入
def insert_sql2(message):
connection = connect()
conn, cursor = connection['conn'], connection['cursor']
sql_insert = "insert into persons(ID, LastName, FirstName) " \
"values (%(ID)s, %(LastName)s, %(FirstName)s)"
try:
cursor.execute(sql_insert, message)
conn.commit()
print("插入成功")
except Exception as e:
print(e)
conn.rollback()
print("插入失败")
finally:
cursor.close()
conn.close()
# 更新数据库
def update_sql():
connection = connect()
conn, cursor = connection['conn'], connection['cursor']
sql_update = "update persons set birthday=%s where ID=%s"
try:
cursor.execute(sql_update, ('2001/7/5', 3))
conn.commit()
print('更新成功')
except Exception as e:
print('更新失败', e)
conn.rollback()
finally:
cursor.close()
conn.close()
pass
# 删除操作
def delete_sql(lastname):
connection = connect()
conn, cursor = connection['conn'], connection['cursor']
sql_delete = "delete from persons where LastName=%s"
try:
cursor.execute(sql_delete, lastname)
conn.commit()
print('删除成功')
except Exception as e:
print('删除失败', e)
conn.rollback()
finally:
cursor.close()
conn.close()
pass
SQL语句占位符的应用
1、完整的SQL语句,直接调用
sql_select = "select * from tablename"
cursor.execute(sql_select)
2、利用占位符传递参数。这里要注意,无论整数、字符串,占位符都为 %s,且不需加引号
在sql语句中借助占位符,组成完整SQL
tabel = 'persons'
sql = "select * from %s" % table
cursor.execute(sql)
参数替代
tabel = 'persons'
sql = "select * from %s"
cursor.execute(sql, table)
# 参数多于1个时,execute()传入参数应为list或者tuple类型
sql_update = "update persons set birthday=%s where ID=%s"
cursor.execute(sql_update, ('2001/7/5', 3))
字典类型传递变量,这里要保证占位符的keys要包含在传递的字典keys中
# 这里的占位符%s修改为%(字典keyname)s
sql_insert = "insert into persons(ID, LastName, FirstName) " \
"values (%(ID)s, %(LastName)s, %(FirstName)s)"
message = {
"ID": 7,
"LastName": "Jone",
"FirstName": "Bob",
}
cursor.execute(sql_insert, message)
标题:【转】python 借助pymysql操作MySQL及占位符问题
作者:jyl
地址:http://jinyunlong.xyz/articles/2022/04/20/1650424706950.html