1、安装mysql模块
pip install pymysql
2、创建表结构
先自己安装一个数据库,并在navicat 中创建表结构
创建unicom的数据
create database unicom DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
创建admin的表,包含id, username,password、mobile
CREATE TABLE admin(
id int not null auto_increment primary key,
username VARCHAR(16) not null,
password VARCHAR(64) not null,
mobile VARCHAR(11) not null);
3、python使用数据库
- 插入数据,sql 写在一个字符串中
在连接的时候指定数据库
import pymysql#1、连接mysql
conn = pymysql.connect(host="43.251.3.112",port=3306,user="root",passwd="123466",charset='utf8',db='unicom')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)#2、发送指令
cursor.execute("insert into admin(username,password,mobile) values('张顺','123456','13687381354')")
#3、提交
conn.commit()#4、关闭连接
cursor.close()
conn.close()
- 以占位符%s传值
插入的值通过参数传入
千万不要用字符串格式化去做SQL的拼接,安全隐患SQL注入
import pymysql#1、连接mysql
conn = pymysql.connect(host="43.251.3.112",port=3306,user="root",passwd="123466",charset='utf8',db='unicom')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)#2、发生指令(千万不要用字符串格式化去做SQL的拼接,安全隐患SQL注入)
sql = "insert into admin(username,password,mobile) values(%s,%s,%s)"
cursor.execute(sql,["王飒","7654321","18711655432"])
#3、提交
conn.commit()#4、关闭连接
cursor.close()
conn.close()
- 以字典传值
import pymysql#1、连接mysql
conn = pymysql.connect(host="43.251.3.112",port=3306,user="root",passwd="123466",charset='utf8',db='unicom')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)#2、发生指令(千万不要用字符串格式化去做SQL的拼接,安全隐患SQL注入)
sql = "insert into admin(username,password,mobile) values(%(n1)s,%(n2)s,%(n3)s)"
cursor.execute(sql,{"n1":"王免","n2":"7654321","n3":"18711655412"})
#3、提交
conn.commit()#4、关闭连接
cursor.close()
conn.close()
- 查询数据,执行select 语句,不需要commit
import pymysql#1、连接mysql
conn = pymysql.connect(host="43.251.3.112",port=3306,user="root",passwd="123466",charset='utf8',db='unicom')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)#2、发生指令(千万不要用字符串格式化去做SQL的拼接,安全隐患SQL注入)
#sql = "insert into admin(username,password,mobile) values(%(n1)s,%(n2)s,%(n3)s)"
sql = "select * from admin"
cursor.execute(sql)
# res = cursor.fetchone() #获取符合条件的第一条数据,如果数据为空,返回None
datalist = cursor.fetchall() #获取到所有合法条件的数据,如果没有数据,返回空元祖
for item in datalist:print(item)#3、关闭连接
cursor.close()
conn.close()
查询出来的结果是:
{'id': 1, 'username': '张顺', 'password': '123456', 'mobile': '13687381354'}
{'id': 2, 'username': '王飒', 'password': '7654321', 'mobile': '18711655432'}
{'id': 3, 'username': '王免', 'password': '7654321', 'mobile': '18711655412'}
- 删除数据
跟插入一样的,只是sql 不一样
import pymysql#1、连接mysql
conn = pymysql.connect(host="43.251.3.112",port=3306,user="root",passwd="123466",charset='utf8',db='unicom')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)#2、发生指令(千万不要用字符串格式化去做SQL的拼接,安全隐患SQL注入)
sql = "delete from admin where id=%s"
cursor.execute(sql,[3,])conn.commit()#4、关闭连接
cursor.close()
conn.close()
- 修改数据
import pymysql#1、连接mysql
conn = pymysql.connect(host="43.254.3.133",port=5001,user="root",passwd="Mysql@si20230206_e",charset='utf8',db='unicom')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)#2、发生指令(千万不要用字符串格式化去做SQL的拼接,安全隐患SQL注入)
sql = "update admin set mobile=%s where id=%s"
cursor.execute(sql,['1777777777',2,])conn.commit()#4、关闭连接
cursor.close()
conn.close()
4、总结
- 在进行新增、删除、修改时,一定要记得commit, 不然数据库没有数据
- 在查询时,不需要commit, 执行fetchall 或fetchone
- 对于SQL语句不要用python的字符串格式化进行拼接,会被SQL注入,一定要用execute+ 参数