目录:

  • 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

mysqlclient pymsql 对比 pymssql和pymysql_sql

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("登陆失败")

输出结果:

成功:

mysqlclient pymsql 对比 pymssql和pymysql_sql_02

失败:

mysqlclient pymsql 对比 pymssql和pymysql_数据_03

但是,有些输入可以注释sql语句

1.在知道用户名的情况下

mysqlclient pymsql 对比 pymssql和pymysql_数据_04


2.不知道用户名

mysqlclient pymsql 对比 pymssql和pymysql_数据_05


是我们的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
	我们以这张表为例

mysqlclient pymsql 对比 pymssql和pymysql_mysql_06

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()

输出结果:

多行添加

mysqlclient pymsql 对比 pymssql和pymysql_sql_07


单行添加

mysqlclient pymsql 对比 pymssql和pymysql_sql_08


获取 添加后的最后一行id,if 你没添加你是获得不了的

mysqlclient pymsql 对比 pymssql和pymysql_数据_09

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()

mysqlclient pymsql 对比 pymssql和pymysql_mysql_10

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()

mysqlclient pymsql 对比 pymssql和pymysql_数据_11

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()

mysqlclient pymsql 对比 pymssql和pymysql_sql_12

因为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

输出结果:

mysqlclient pymsql 对比 pymssql和pymysql_数据_13


当id="dsf"时会报异常

因为id是不能重复且不为空的整型

conn.rollback()#会把数据回滚到没有执行异常之前

mysqlclient pymsql 对比 pymssql和pymysql_mysql_14