- 安装 python 连接 mysql 工具
pip install PyMySQL
- python 连接 mysql
import pymysql
try:
# 打开数据库连接
db = pymysql.connect(host="127.0.0.1", port=3306, user="pythonic", passwd="pythonic", db="test1", charset="utf8")
# 使用 db 的 cursor 方法, 创建一个游标对象 cursor
cursor = db.cursor()
# 所要执行的 sql 语句
# insert
# sql = 'insert into students(sname) values("pymysql")'
# update
# sql = 'update students set sname="mysqldb" where id=5'
# delete
sql = 'delete from students where id=7'
# 使用游标对象 cursor 的 execute 方法执行 sql 语句
cursor.execute(sql)
# 因为 python 连接 mysql 后默认开启了事务, 所以要使执行语句的结果生效, 要进行 commit 操作
db.commit()
# 操作完成后, 关闭 cursor 对象和数据库对象 db
cursor.close()
db.close()
print("OK")
except Exception as err:
print("error: %s" % err)
- 参数化, 参数化主要解决的是 sql 注入的问题, 可以给 execute 方法传入第二个参数用来实现参数化, 这个参数必须是一个列表
import pymysql
try:
db = pymysql.connect(host="127.0.0.1", port=3306, user="pythonic", passwd="pythonic", db="test1", charset="utf8")
cursor = db.cursor()
# 接收用户输入的数据
sname = input("请输入用户名:")
# %s 是用来占位的, 区别于 python 中的格式化, 这里输入任何东西都是用 %s
sql = 'insert into students(sname) values(%s)'
# execute 第一个参数是要执行的 sql 语句, 第二个参数是一个列表,
# 将用户输入的用户名 name 组装成列表传入 execute, 如果有多个
# 值, 列表中值的顺序要和 sql 语句中 values(%s) 所要插入值的顺序对应
cursor.execute(sql, [sname])
db.commit()
cursor.close()
db.close()
print("OK")
except Exception as err:
print("error: %s" % err)
- 封装代码
# MySQLHelper.py
import pymysql
class MySQLHelper(object):
def __init__(self, host, port, user, passwd, db, charset="utf8"):
self.host = host
self.port = port
self.user = user
self.passwd = passwd
self.db = db
self.charset = charset
def connect(self):
self.conn = pymysql.connect(host=self.host, port=self.port, user=self.user, passwd=self.passwd, db=self.db, charset=self.charset)
self.cursor = self.conn.cursor()
def close(self):
self.cursor.close()
self.conn.close()
def get_one(self, sql, params=[]):
result = None
try:
self.connect()
self.cursor.execute(sql, params)
result = self.cursor.fetchone()
self.close()
except Exception as e:
print("error: %s" % e)
return result
def get_all(self, sql, params=[]):
result = []
try:
self.connect()
self.cursor.execute(sql, params)
result = self.cursor.fetchall()
self.close()
except Exception as e:
print("error: %s" % e)
return result
def insert(self, sql, params=[]):
return self.__edit(sql, params)
def update(self, sql, params=[]):
return self.__edit(sql, params)
def delete(self, sql, params=[]):
return self.__edit(sql, params)
def __edit(self, sql, params):
count = 0
try:
self.connect()
count = self.cursor.execute(sql, params)
self.conn.commit()
self.close()
count = 1
except Exception as e:
print("error: %s" % e)
return count
- 测试封装的代码
# test_MySQLHelper.py
from MySQLHelper import MySQLHelper
# 测试添加
# sql = 'insert into stus(sname, sgender) values(%s,%s)'
# sname = input("请输入用户名:")
# sgender = input("请输入用户性别, 1为男, 0为女:")
# params = [sname, bool(sgender)]
# 测试修改
# sql = 'update stus set sname=%s where id=%s'
# sname = input("请输入新用户名:")
# sid = int(input("请输入用户 id:"))
# params = [sname, sid]
# mysql_helper = MySQLHelper("127.0.0.1", 3306, "pythonic", "pythonic", "test1")
# count = mysql_helper.insert(sql)
# if count == 1:
# print("OK")
# else:
# print("error")
# 测试查询
sql = 'select * from stus order by id desc'
mysql_helper = MySQLHelper("127.0.0.1", 3306, "pythonic", "pythonic", "test1")
one = mysql_helper.get_one(sql)
all = mysql_helper.get_all(sql)
print(one)
print(all)
-
原始数据
01.原始数据
-
测试添加一条数据
02.测试添加
-
测试修改数据
03.测试修改
-
测试查询数据
04.测试查询
- 总结
connect:
连接数据库原则:尽量晚打开, 尽量早关闭(尽量避免有可能别的地方也在操作数据库)
connect(host, port, user, passwd, db, charset)
course()
commit()
close()
cursor:
execute()
如果执行 insert/update/delete 语句时, 需要 commit()
fetchone()
fetchall()
close()








网友评论