4000字,详解 Python 操作 MySQL 数据库!
作者 | 黄伟呢
出品 | 数据分析与统计学之美
本文的重点,就是教会大家,如何用Python来操作MySQL数据库。
1. 通用步骤
其实,这里有一个通用步骤,都是写死了的,大家照做就行。
# 1. 导入相关库
import pymysql# 2. 链接MySQL服务器
db = pymysql.connect(host='localhost' , user='root' , password='******' , port=3306 ,db='spiders' , charset='utf8')# 3. 创建一个cursor游标对象
cursor = db.cursor()# 4. 在这一步写你的sql语句
sql = 'select version()'# 5. 执行sql语句
cursor.execute(sql)# 6. 断开连接
db.close()
可以看出,整个过程就是第四步那里不同。归根到底,其实就是写sql。
2. 需要特别说明的知识点
Ⅰ 各参数说明
db = pymysql.connect(host='localhost' , user='root' , password='******' , port=3306 ,db='spiders' , charset='utf8')
这一行代码很长,里面涉及到好几个参数,这里为大家一一介绍如下:
参数 1 :mysql 服务器所在的主机 IP
参数 2 :用户名;
参数 3 :密码;
参数 4 :连接的 mysql 主机的端口,默认是 3306;
参数 5 :连接的数据库名;
参数 6 :通信采用的编码方式,默认是'gb2312',要求与数据库创建时指定的编码一致,否则中文会乱码;
Ⅱ cursor游标对象
3. Python增删改查操作
① 创建一个数据表
import pymysqldb = pymysql.connect(host='192.168.3.47' , user='root',password='******' , port=3306 , db='spiders' , charset='utf8')cursor = db.cursor()# 检查表是否存在,如果存在删除
cursor.execute('drop table if exists students')# 创建表
sql = 'create table students(id int auto_increment primary key not null,name varchar(10) not null,age int not null)'cursor.execute(sql)db.close()
注:以后用代码创建表的机会并不多,表一般都是我们提前创建好的。
② 插入数据
import pymysqldb = pymysql.connect(host='192.168.3.47' , user='root',password='******' , port=3306 , db='spiders' , charset='utf8')cursor = db.cursor()# 插入数据
sql = 'insert into students(name,age) values(%s,%s)'
try:cursor.execute(sql,('孙悟空',100000))db.commit()
except:print("插入失败")db.rollback()db.close()
注 1:插入数据一定要用 try…except…语句,因为万一没插入成功,其余代码都无法执行。
注 2:import pymysql,此模块是默认开启mysql的事务功能的,因此,进行“增”、“删”、“改”的时候,一定要使用db.commit()提交事务,否则就看不见所插入的数据。
③ 更新数据
import pymysqldb = pymysql.connect(host='192.168.3.47' , user='root',password='******' , port=3306 , db='spiders' , charset='utf8')cursor = db.cursor()# 更新数据
sql = 'update students set age =%s where name=%s'
try:cursor.execute(sql,(30,"郭卫华"))db.commit()
except:print("插入失败")db.rollback()db.close()
③ 删除操作
import pymysqldb = pymysql.connect(host='192.168.3.47' , user='root',password='******' , port=3306 , db='spiders' , charset='utf8')cursor = db.cursor()# 删除数据
sql = 'delete from students where age=100000'
try:cursor.execute(sql)db.commit()
except:print("插入失败")db.rollback()db.close()
④ 查询操作
fetchone()功能:获取下一个查询结果集,结果集是一个对象。
fetchall()功能:接收全部返回的行。
import pymysqldb = pymysql.connect(host='192.168.3.47' , user='root',password='******' , port=3306 , db='spiders' , charset='utf8')cursor = db.cursor()# 查询数据
sql = 'select * from students where age>60'
try:cursor.execute(sql)reslist = cursor.fetchall()for row in reslist:print(“%d--%d” %(row[0],row[1],… row[n]))
except:print("插入失败")db.rollback()db.close()
4. 封装一个类
# 注:把下面类写在 studentsql 文件中
import pymysql
class StudentsSql():def __init__(self,host,user,port,dbname,charset):self.host = hostself.user = userself.port = portself.dbname = dbnameself.charset = charsetdef connet(sef):self.db = pymysql.connect(self.host, self.user, self.port,self.dbname, self.charset)def close(self):self.cursor.close()self.db.close()def get_one(self,sql):res = Nonetry:self.connect()self.cursor.execute(sql)res = self.cursor.fetchone()self.close()except:print(“查询失败”)return resdef get_all(self,sql):res = Nonetry:self.connect()self.cursor.execute(sql)res = self.cursor.fetchall()self.close()except:print(“查询失败”)return resdef inset(self,sql):return self.__edit(sql)def update(self,sql):return self.__edit(sql)def delete(self,sql):return self.__edit(sql)def __edit(self,sql):count = 0try:self.connect()count = self.cursor.execute(sql)self.db.commit()self.close()except:print(“事务提交失败”)self.db.rollback()return count
上述类封装成功,以后只需要调用即可。
from studentsql import StudentsSql
s = StudentsSql(“host='192.168.3.47' , user='root', password='******' , port=3306 , db='spiders' , charset='utf8'”)
res = s.get_all('select * from students where age>60')
for row in res:print(“%d--%d” %(row[0],row[1],… row[n]))
往
期
回
顾
资讯
AI 考古比胡八一更高效
资讯
这个机器狗引起网友争议!
资讯
阿里发布云芯片倚天710
资讯
英特尔开源编程工具 ControFlag
分享
点收藏
点点赞
点在看
相关文章:

php跨域共享session
、 $gb_DBHOSTname "127.0.0.1"; //主机的名称或是IP地址 02 $gb_DBname "dbname"; //数据库名称 03 $gb_DBuser "username"; //数据库用户名称 04 $gb_DBpass "pwd"; //数据库密码 05 $gb_COOKIE_DOMAIN .a.com; 06 $SESS_DBH …

centos6 防火墙iptables操作整理
使用语句 前言: iptables的启动文件位置再: /etc/init.d/iptables , srevice iptables调用的就是这里的执行文件 查看防火墙状态 service iptables status开启防火墙 service iptables start 关闭防火墙 service iptables stop永久关闭防火墙(开机不启动) chkconfig i…

分布式计算开源框架Hadoop入门实践
在SIP项目设计的过程中,对于它庞大的日志在开始时就考虑使用任务分解的多线程处理模式来分析统计,在我从前写的文章《Tiger Concurrent Practice --日志分析并行分解设计与实现》中有所提到。但是由于统计的内容暂时还是十分简单,所以就采用M…

网络配置文件、命令详解
一、网络服务、配置文件二、ifconfig常用命令三、route常用命令四、ip命常用命令五、其他一、网络服务、配置文件修改网络服务配置文件不会立即生效,重启网络服务或主机后生效且永久有效1、配置文件1.1、网络配置文件:/etc/sysconfig/network[rootTESTHO…

面了一个大佬,一看就背了很多面试题
2021都说工作不好找,其实也是对开发人员的要求变高了。正好前段时间自己有整理了一些Java后端开发面试常问的高频考点问题做成一份PDF文档(1000道高频题),同时也整理一些图文解析及笔记。今天在这免费分享给大家,希望大…

swift的特点
swift与OC的区别: swift是一门强语言,而OC是一门弱语言。强语言比弱语言更加严谨 每写一行代码系统都会自动检测是否有错误,这样就减少了运行后出错的可能。swift支持开源,所以可以引用到其他语言开发的项目中,OC是闭源…

Apache模块开发helloworld无错版
环境:CentOS 5.4 第一步:安装Apache的apxs 首先来介绍下apache的一个工具apxs。apxs是一个为Apache HTTP服务器编译和安装扩展模块的工具,用于编译一个或多个源程序或目标代码文件为动态共享对象,使之可以用由mod_so提供的LoadM…

Golang+Python 实现安全动态开机密码+服务器存储
作者 | 李秋键 出品 | AI科技大本营(ID:rgznai100) 引言: 如果谈到近几年来新起的语言,必然离不开Python语言和Go语言,正如python在人工智能领域的发展火热,Go语言在服务器并发处理也有着非常优势。 Go语言…

《中国顶尖技术团队访谈录·第二季》发布
卷首语(InfoQ中国总编辑 崔康)\\在提笔写这篇卷首语的时候,我们刚刚为InfoQ中国过完八岁生日。回溯到2007年的3月28日,InfoQ中文站正式上线运营,从此中国的IT技术人有了一个崭新的学习和成长的平台,InfoQ中…

record-09 ATM 过程思想 综合练习
#__author: hasee #date: 2018/1/16 # user_info.txt包含内容: # zhangsan1 123456 3500 # zhangsan2 123456 4000 # zhangsan3 123456 4500 # zhangsan4 123456 5000 # zhangsan5 123456 5500 # zhangsan6 123456 6000 # zhangsan7 123456 6500 # zhangsan8 12345…

在ApacheHTTPD服务器中使用DSO完全分析
Apache HTTP 服务器是一个模块化(或说积木式)的程序,管理员可以选择一些模块来增加服务器的某些功能。这些模块,可以在创建服务器程序时静态地编译到httpd服务器的二进制代码中,也可以编译成一些独立于服务器程序的Dyn…

apache 2.4.12 + tomcat 7.0.61 + jk connectors 1.2.40实现tomcat负载均衡集群
实验环境: CentOS 5.11 final hostname:T1.getg.com IP地址:192.168.50.138软件准备: CentOS Linux 5.*系统光盘中的“Development tools”工具包组 jdk-8u45-linux-x64.tar.gz pcre-8.36.tar.gz apr-util-1…

有哪些新手程序员不知道的小技巧?
提到新手程序员,大家想到的第一个词可能就是:刷题。尤其是通过LeetCode刷题,想必新手程序员们都经历过这一步,甚至不少人认为只要在LeetCode上刷的题目够多,就一定能够进阶为大神。但是,不难发现࿰…

cocostudio UI编辑器中UITextField输入框控件光标
http://www.cocoachina.com/bbs/read.php?tid194533

在apache中使用 memcache 来作 session 存储
session.save_handler memcache session.save_path "tcp://127.0.0.1:11211" 使用多个 memcached server 时用逗号","隔开,并且和 Memcache::addServer() 文档中说明的一样,可以带额外的参数"persistent"、"weigh…

Android WebView访问SSL证书网页(onReceivedSslError)
Android WebView访问https SSL证书网页,如淘宝,需要在onReceivedSslError添加SSL支持 webview.setWebViewClient(new WebViewClient() {Overridepublic void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {// 不要使用su…

改名 Meta,打元宇宙牌,老龄化的 Facebook 能否再换新颜
编译 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 美东时间10月28日周四,在名为 Facebook Connect 的年度大会上,Facebook 宣布,Facebook 将公司名称更改为“Meta”,这个新名字反映了该公司在社交媒体之外…

Android NDK开发之旅31 FFmpeg音频解码
###前言 #####基于Android NDK开发之旅30--FFmpeg视频播放这篇文章,我们已经学会视频解码基本过程。这篇文章就对音频解码进行分析。 #####音频解码和视频解码的套路基本是一样的, 否则怎么会做到音视频同步播放呢? ###1.FFmpeg音视解码过程分…

整理了 65 个 Matplotlib 案例,这能不收藏?
作者|周萝卜来源|萝卜大杂烩Matplotlib 作为 Python 家族当中最为著名的画图工具,基本的操作还是要掌握的,今天就来分享一波文章很长,高低要忍一下,如果忍不了,那就收藏吧,总会用到的。启用和检查交互模式在…

负载均衡工具haproxy安装,配置,使用
一,什么是haproxy HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代 理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运…

【文章】本站收集与转载文章目录
1.关于推荐系统中的特征工程 2.Java程序员最喜欢的11款免费IDE编辑器 3.人工智能和机器学习领域的一些有趣的开源项目 4.微软发布Project Oxford,供Azure户免费集多项功能 5.微软推Azure机器学习工具:Algorithm Cheat Sheet

L09-10老男孩Linux运维实战培训-Nginx服务生产实战应用指南05(架构解决方案)
nginx的多实例设置首先说一下nginx后面加的参数的说明 -s 后面加reload 就是重新加载的意思和apache的graceful同样的效果 -v 小写的v显示版本号后退出 -V大写的V显示nginx的版本号和配置环境 -t 就是test的意思,检查配置文件是否正确 -c 后面配置文件的地址&#x…

linux中的apachectl是什么命令
apachectl是Apache HTTP服务器的前端程序。其设计意图是帮助管理员控制Apache httpd后台守护进程的功能。apachectl脚本有两种操作模式。首先,作为简单的httpd的前端程序,设置所有必要的环境变量,然后启动httpd ,并传递所有的命令…

数据库性能优化1——正确建立索引以及最左前缀原则
1. 索引建立的原则用于索引的最好的备选数据列是那些出现在WHERE子句、join子句、ORDER BY或GROUP BY子句中的列。仅仅出现在SELECT关键字后面的输出数据列列表中的数据列不是很好的备选列SELECTcol_a <- 不是备选列FROMtbl1 LEFT JOIN tbl2ON tbl1.col_b tbl2.col_c <-…

深度学习发展下的“摩尔困境”,人工智能又将如何破局?
前不久,微软和英伟达推出包含5300亿参数的语言模型MT-NLG,这是一款基于 Transformer 的模型被誉为“世界上最大、最强的生成语言模型”。 毫无疑问,这是一场令人印象深刻的机器学习工程展示。 然而,我们是否应该对这种大型模型趋势…

Kotlin学习笔记-基础语法
去年学习过一遍Kotlin,相比java而言,Kotlin确实有许多方便的地方,但是学习之后一直没有真正拿来写项目,很久不用很多东西都已经忘记了。最近Google宣布Kotlin成为Android开发的官方语言之后,Kotlin突然变得火热起来&am…

英特尔王锐:软硬件并驾齐驱,开发者是真英雄
北京时间10月28日,英特尔On技术创新峰会在北京举办。在此次峰会上,英特尔公司高级副总裁、英特尔中国区董事长王锐对外宣告了英特尔拥抱开发者,回归技术创新的决心和信心。 英特尔此前提出,四大超级技术力量赋能数字化的变革&…

基于html5海贼王单页视差滚动特效
分享一款基于html5海贼王单页视差滚动特效是一款流行滑落网页特效代码。效果图如下: 在线预览 源码下载 实现的代码: <div class"top"><div class"top_main center"><ul id"scene" class"scene&quo…

切换apache的prefork和worker模式
Apache HTTP服务器被设计为一个强大的、灵活的能够在多种平台以及不同环境下工作的服务器。 不同的平台和不同的环境经常产生不同的需求,或是为了达到同样的最佳效果而采用不同的方法。 Apache凭借它的模块化设计很好的适应了大量不同的环境。 这一设计使得网站管理…

使用adb devices命令无法识别夜神模拟器的解决方法
模拟器不喜欢原生态的,喜欢简单好用的,这里用的是夜神模拟器现象夜神模拟器启动成功,此时用adb devices命令查看,居然啥都不显示,也就是没识别出来分析很大可能是因为adb的版本不一致导致的,心中无数个草泥…