目录:
- Python操作MySQL主要使用的两种方式?
- 一.pymysql
- (1). 下载安装
- (2).基本使用操作
- 1.创建链接
- 实践.(创建个数据库用于用户登陆)
- (3).增删改查操作
- 1.增添操作
- 2. 删除操作
- 3.更新数据表操作(改)
- 4. 查操作
- 5.数据的回滚
Python操作MySQL主要使用的两种方式?
1.原生模块 pymsql
2.ORM框架 SQLAchemy
一.pymysql
(1). 下载安装
pip install pymysql
如果感觉下载慢,可以用镜像
pip install pymysql -i http://mirrors.aliyun.com/
(2).基本使用操作
1.创建链接
在建链接之前,我们需要做好一些前期工作:建库建表
保证我们能连接到数据库
操作数据可以由result = cursor.execute(sql语句)提交的数据库语句进行操作
#创建链接需要用的参数
def __init__(self, host=None, user=None, password="",
database=None, port=0, unix_socket=None,
charset='', sql_mode=None,
read_default_file=None, conv=None, use_unicode=None,
client_flag=0, cursorclass=Cursor, init_command=None,
connect_timeout=10, ssl=None, read_default_group=None,
compress=None, named_pipe=None,
autocommit=False, db=None, passwd=None, local_infile=False,
max_allowed_packet=16*1024*1024, defer_connect=False,
auth_plugin_map=None, read_timeout=None, write_timeout=None,
bind_address=None, binary_prefix=False, program_name=None,
server_public_key=None):
#一般用到的几个参数
'''
conn = pymysql.connect(
host=“你的数据库地址”,
user=“用户名”,password=“密码”,
database=“数据库名”,
charset=“utf8”)
'''
# 创建连接
conn = pymysql.connect(host='localhost', user='root', passwd='123', db='t1')
# 创建游标(# 得到一个可以执行SQL语句的光标对象)
cursor = conn.cursor()# 执行完毕返回的结果集默认以元组显示
# 得到一个可以执行SQL语句并且将结果作为字典返回的游标
#cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 定义要执行的SQL语句
sql = """
CREATE TABLE USER1 (
id INT auto_increment PRIMARY KEY ,
name CHAR(10) NOT NULL UNIQUE,
age TINYINT NOT NULL
)ENGINE=innodb DEFAULT CHARSET=utf8; #注意:charset='utf8' 不能写成utf-8
"""
# 执行SQL,并返回收影响行数
result = cursor.execute(sql语句)
# 提交,不然无法保存新建或者修改的数据(增删改会用到)
conn.commit()
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
实践.(创建个数据库用于用户登陆)
1.首先利用mysql创建一个数据库
在创建一张用户表
我创建的数据库是g3,用户表是user
2.python代码实现链接并进行验证登陆是否正确
import pymysql
user = input("username:").strip()
pawd = input("password:").strip()
# 创建链接
conn = pymysql.connect(host="localhost", user='root', password='', database='g3')
# 创建一只手
cursor = conn.cursor()
# 定义sql语句
sql = "select * from user where username='%s' and password='%s'" %(user,pawd)
# 执行sql语句
cursor.execute(sql)
result = cursor.fetchone()
cursor.close()
conn.close()
if result:
print("登陆成功")
else:
print("登陆失败")
输出结果:
成功:
失败:
但是,有些输入可以注释sql语句
1.在知道用户名的情况下
2.不知道用户名
是我们的sql语句被注释了
修改办法
execute帮我们做字符串拼接
# 将以下代码
sql="select * from userinfo where name='%s' and password='%s'" %(user,pwd)
res=cursor.execute(sql)
# 改为
sql="select * from userinfo where name=%s and password=%s" #%s需要去掉引号,pymysql会自动加上
res=cursor.execute(sql,[user,pwd])#可以用元组或列表
完整代码:
import pymysql
user = input("username:").strip()
pawd = input("password:").strip()
# 创建链接
conn = pymysql.connect(host="localhost", user='root', password='', database='g3')
# 创建一只手
cursor = conn.cursor()
# 执行sql语句
# sql = "select * from user where username='%s' and password='%s'" %(user,pawd)
# cursor.execute(sql)
sql = "select * from user where username=%s and password=%s"
cursor.execute(sql,(user,pawd))
result = cursor.fetchone()
cursor.close()
conn.close()
if result:
print("登陆成功")
else:
print("登陆失败")
(3).增删改查操作
1.首先利用mysql创建一个数据库
在创建一张用户表
我创建的数据库是g3,用户表是user
我们以这张表为例
1.增添操作
代码实现:
import pymysql
# 创建链接
conn = pymysql.connect(host="localhost", user='root', password='', database='g3',charset='utf8')
# 创建一只手
cursor = conn.cursor()
'''
#添加多条数据
'''
sql='insert into user(username,password) values (%s,%s)'
data=[
("alexs","45656"),
("alexs1","4666"),
("alexs2","888")
]
# 拼接并执行sql语句
cursor.executemany(sql, data)
# 涉及增,删,改操作要注意提交
conn.commit()
'''
添加单条数据
sql='insert into user(username,password) values (%s,%s)'
username="alex33"
password="12355"
cursor.execute(sql,[username,password])
'''
'''
# 获取最新的那一条数据的ID
last_id = cursor.lastrowid
print("最后一条数据的ID是:", last_id)
'''
#关闭游标
cursor.close()
#关闭链接
conn.close()
输出结果:
多行添加
单行添加
获取 添加后的最后一行id,if 你没添加你是获得不了的
2. 删除操作
代码实现:
import pymysql
# 创建链接
conn = pymysql.connect(host="localhost", user='root', password='', database='g3',charset='utf8')
# 创建一只手
cursor = conn.cursor()
#删除操作
sql="delete from user where username=%s"
username="alex33"
cursor.execute(sql,username)
# 涉及增,删,改操作要注意提交
conn.commit()
cursor.close()
conn.close()
3.更新数据表操作(改)
代码实现:
import pymysql
# 创建链接
conn = pymysql.connect(host="localhost", user='root', password='', database='g3',charset='utf8')
# 创建一只手
cursor = conn.cursor()
# 更新数据操作
sql="update user set username=%s where password=%s "
cursor.execute(sql,["aaa","1"])
# 涉及增,删,改操作要注意提交
conn.commit()
cursor.close()
conn.close()
4. 查操作
代码实现:
import pymysql
# 创建链接
conn = pymysql.connect(host="localhost", user='root', password='', database='g3',charset='utf8')
# 创建一只手
cursor = conn.cursor()
# 查询数据
sql="select * from user"
cursor.execute(sql)
result=cursor.fetchone()#获得一条数据
re2=cursor.fetchmany(3)#获得三条数据
re3=cursor.fetchall()#获得所有数据
print(result)
print(re2)
print(re3)
# 涉及增,删,改操作要注意提交
conn.commit()
cursor.close()
conn.close()
因为cursor.fetchone()获得第一条数据,
cursor.fetchmany(3)从第一条数据之后获得三条数据,
cursor.fetchall()从第四条数据之后获得所有数据
cursor.scroll(1, mode="absolute")
# 光标按照相对位置(当前位置)移动1
cursor.scroll(1, mode="relative")
5.数据的回滚
代码实现:
import pymysql
# 创建链接
conn = pymysql.connect(host="localhost", user='root', password='', database='g3',charset='utf8')
# 创建一只手
cursor = conn.cursor()
try:
sql = 'insert into user(id,username,password) values (%s,%s,%s)'
id=65#id="dsf"
username = "ffff"
password = "66666"
cursor.execute(sql, [id,username, password])
conn.commit()
except Exception as err:
print(err)
conn.rollback()
#关闭游标
cursor.close()
#关闭链接
conn.close()
当id=65
输出结果:
当id="dsf"时会报异常
因为id是不能重复且不为空的整型
conn.rollback()#会把数据回滚到没有执行异常之前