Python操作mysql数据库

连接工具

mysqldb又叫MySQL-python

优点:基于C开发的库,速度快

缺点:在 Windows 平台安装非常不友好,经常出现失败的情况,多年不更新了,只兼容python2

mysqlclient

优点:基于C开发的库,速度快,兼容python3

缺点:编译安装可能会导致报各种错误

pymysql

优点:纯 Python 实现的驱动,兼容python3,使用简单

缺点:速度不如mysqldb

执行流程

安装pymysql

pip install pymysql

连接数据库函数

connect函数:连接数据库,根据连接的数据库类型不同,该函数的参数也不同返回Connection对象

import pymysql

#获取连接

con = pymysql.connect(host="localhost",port=3306,user="root",password="root",db="test06",charset='utf8')

获取游标

cursor方法:获取操作数据库的Cursor对象,包含了很多操作数据的方法。cursor方法属于Connection对象

#创建cursor

cursor = connection.cursor()

执行单条sql语句

execute(query,args=None)

函数作用:执行单条的sql语句,执行成功后返回受影响的行数 参数说明:

query:要执行的sql语句,字符串类型

args:可选的序列或映射,用于query的参数值。如果args为序列,query中必须使用%s做

批量执行SQL语句

executemany(query,args=None)

函数作用:批量执行sql语句,比如批量插入数据,执行成功后返回受影响的行数

参数说明:

query:要执行的sql语句,字符串类型

args:嵌套的序列或映射,用于query的参数值

提交事务

commit方法:在修改数据库后,需要调用该方法提交对数据库的修改。

#提交事务

con.commit()

回滚

rollback方法:如果修改数据库失败,一般需要调用该方法进行数据库回滚,也就是将数据库恢复成修改之前的样子。

#如果出现异常,回滚

con.rollback()

创建数据库和表

创建数据库

# 安装pymysql:pip install pymysql
import pymysql
# 连接数据库
con = pymysql.connect(host='localhost',port=3306,user='root',passwd='root',charset='utf8')
# 获取一个和数据库交互的工具cursor
coursor = con.cursor()
# 编写SQL
sql = '''
CREATE DATABASE test
   DEFAULT CHARACTER SET = 'utf8mb4';
'''
# 执行SQL
coursor.execute(sql)
# 关闭cursor
coursor.close()
# 关闭链接
con.close()

创建表

# pip install pymysql
import pymysql
# 链接数据库
con = pymysql.connect(host='localhost',port=3306,user='root',passwd='root',charset='utf8',db='test')
# 获取一个和数据库交互的工具cursor
coursor = con.cursor()
# 编写SQL
sql = '''
CREATE TABLE user( 
   id int NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT 'Primary Key',
   username VARCHAR(32) not null,
   age int(11) not null,
   sex VARCHAR(5)
) DEFAULT CHARSET UTF8;
'''
# 执行SQL
coursor.execute(sql)
# 关闭cursor
coursor.close()
# 关闭链接
con.close()

增删改查

# pip install pymysql
import pymysql
def add_one():
  # 链接数据库
  con = pymysql.connect(host='localhost',port=3306,user='root',passwd='root',db='test',charset='utf8')
  # 获取操作数据的对象 cursor
  cursor = con.cursor()
  # 编写SQL-DML
  sql = "INSERT INTO user VALUES (0,%s,%s,%s);"
  # 添加单条数据
  args1 = ('刘备',22,'男')
  cursor.execute(sql,args1)
  # 添加多条数据
  #args2 = (('孙权',23,'男'),('孙尚香',20,'女'))
  #cursor.executemany(sql,args2)
  # 提交事务
  con.commit()
  # 关闭Cursor
  cursor.close()
  # 关闭链接
  con.close()
if __name__=='__main__':
  add_one()

# pip install pymysql
import pymysql
def delete_one():
  # 链接数据库
  con = pymysql.connect(host='localhost',port=3306,user='root',passwd='root',db='test',charset='utf8')
  # 获取操作数据的对象 cursor
  cursor = con.cursor()
  # 编写SQL-DML
  sql='delete from user where id=2'
  cursor.execute(sql)
  # 提交事务
  con.commit()
  # 关闭Cursor
  cursor.close()
  # 关闭链接
  con.close()
if __name__=='__main__':
  delete_one()

# pip install pymysql
import pymysql
def update_one():
  # 链接数据库
  con = pymysql.connect(host='localhost',port=3306,user='root',passwd='root',db='test',charset='utf8')
  # 获取操作数据的对象 cursor
  cursor = con.cursor()
  # 编写SQL-DML
  #将id=2的年龄修改为18
  sql='update user set age=%s where id=%s'
  cursor.execute(sql,(18,3))
  # 提交事务
  con.commit()
  # 关闭Cursor
  cursor.close()
  # 关闭链接
  con.close()
if __name__=='__main__':
  update_one()

#导入模块pip install pymysql
import pymysql
#创建连接
con = pymysql.connect(host='localhost',user='root',password='root',db='test',charset='utf8')      
#创建游标对象cursor
cursor=con.cursor()
sql='select * from user'
#执行sql
cursor.execute(sql)
#获取结果集
#fetchone(): 该方法获取下一个查询结果集。结果集是一个对象
#fetchall(): 接收全部的返回结果行。
#fetchmany(num):查询指定条数的记录。
result = cursor.fetchall()
print(result)
#rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。
print(cursor.rowcount)
# 关闭Cursor
cursor.close()
# 关闭链接
con.close()

Sql异常处理

Sql异常

SQL语句出现错误时,执行sql会出错,后续代码不会执行,游标等都不会关闭

解决示例

#导入模块pip install pymysql
import pymysql
#SQL语句出现错误时,执行sql会出错,后续代码不会执行,游标等都不会关闭,用try except做处理
def query_data():
   #创建连接
   con = pymysql.connect(host='localhost',user='root',password='root',db='test',charset='utf8')      
   #创建游标对象cursor
   cursor=con.cursor()
   #编写sql【SQL是错误的】
   sql='select * from user where'
   try:
      #执行sql
      cursor.execute(sql)
      #获取结果集
      result = cursor.fetchall()
      print(result)
   except Exception as e:
      print('SQL语句出现错误')  
   # 关闭Cursor
   cursor.close()
   # 关闭链接
   con.close()
if __name__=='__main__':
   query_data()  

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月木@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值