社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python与MySQL的交互

爬虫俱乐部 • 6 年前 • 1120 次点击  


学习之路,永无止境

暑期Stata培训班报名倒计时咯!!!接力线上的网课培训,我们在今夏又开始新一轮的线下培训啦!8月4日至12日,爬虫俱乐部期待与您的相遇!培训具体内容详见推文《暑期Stata编程技术定制培训班》。

有问题,不要怕!点击推文底部“阅读原文”下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~

喜大普奔~爬虫俱乐部的github主站正式上线了!我们的网站地址是:https://stata-club.github.io,粉丝们可以通过该网站访问过去的推文哟~

好消息:爬虫俱乐部隆重推出数据定制及处理业务啦,您有任何网页数据获取及处理方面的难题,请发邮件至我们邮箱statatraining@163.com,届时会有俱乐部资深高级会员为您排忧解难!

在实际工作过程中,我们往往需要将在Python中得到的数据保存到SQL里,如果我先将Python中的数据保存到本地,再打开MySQL,将本地文件上传上去的话,就显得麻烦了不少。因此,本次小编将给大家介绍的就是使用Python中的pymysql模块操作MySQL数据的方法。

首先,我们需要下载相关的模块pymysql,小编使用的是pycharm编辑器,可以简单地从file->project interpreter->available packages中查找pymysql并安装,如果你们使用的是非Pycharm的Python IDE,可以在终端键入pip install pymysql

连接MySQL并创建新的数据库

首先我们可以打开MySQL,双击用户,选中用户右键,选择“编辑用户”,我们看到:

这说明当前的MySQL运行在本地,用户名为‘root’,密码为“*********” (我们假设密码为‘123456’),运行端口号默认为3306。


import pymysql
db = pymysql.connect(host='localhost',user='root',password='123456',port=3306)


连接成功之后,我们需要调用cursor()方法获得MySQL的操作游标,这样我们就可以访问和操作数据库中的数据了,接下来我们创建一个叫“spiders”的数据库,用cursor.execute()来执行,最后关闭数据库连接。


cursor = db.cursor()
cursor.execute("CREATE DATABASE spiders DEFAULT CHARACTER SET utf8")
db.close()


经过以上操作之后,我们打开MySQL就会发现成功创建了spiders数据库。

创建新表

比方说我们要创建一个叫“sample”的数据表,里面有三个变量:id,name,age。


db = pymysql.connect(host='localhost', user='root', password='123456', port=3306, db='spiders')
cursor = db.cursor()
sql = 'CREATE TABLE IF NOT EXISTS sample (id VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, age INT NOT NULL, PRIMARY KEY (id))'
cursor.execute(sql) db.close()


值得注意的是,创建新表的时候必须指定数据库,所以在连接的时候必须再额外指定一个参数db='spiders'。打开MySQL,我们发现sample表确实被成功创建了:

插入一条数据

假设我们现在有这样一条数据data,需要将它保存到sample这个表中


data=['0001','Amy',24


    
]
sql = 'replace into sample(id,name,age) values(%s,%s,%s) '
cursor.execute(sql,data) db.commit() db.close()


注意:%s表示的是占位符,包含字符串、数字或者其他类型,%s不能加引号。sql = 'replace into sample(id,name,age) values(%s,%s,%s)'所起到的作用等价于sql= "replace into sample(id,name,age) values('0001','Amy',24)"

另外,插入、更新和删除操作都是对数据库进行更改的操作,而更改操作都必须为一个事务,所以这些操作的标准写法就是:


try:
    cursor.execute(sql)
    db.commit()
except:    db.rollback()  #如果执行失败,就执行数据回滚


因此,最后我们修改程序为:


data=['0001','Amy',24]
sql = 'insert into sample(id,name,age) values(%s,%s,%s) '
try:    cursor.execute(sql,data)    db.commit()    print('成功')
except:    db.rollback()    print('失败') db.close()

插入多条数据

如果有多条数据,我们使用上述方法一条一条录入,这显然是不可能的,在这里就使用到了cursor.executemany()


data=[('0003','Cindy',21),('0004','Bob',32)]
sql = 'insert into sample(id,name,age) values(%s,%s,%s) '
try:    cursor.executemany(sql,data)    db.commit()    print('成功')
except:    db.rollback()    print('失败') db.close()


得到:

如何去重,只添加新增的数据

在某些情况下,我们爬取到的数据含有重复值,如果我们只想要添加新的数据到表中,而不再添加重复数据,我们可以修改sql中的“insert”为“replace”:

可以发现,我们需要录入的数据data中有一条id为0004的数据是重复的,而id为0005的是需要添加到表中的新数据。


data=[('0005','Eve',22),('0004','Bob',32)]
sql = 'replace into sample(id,name,age) values(%s,%s,%s) '
try:    cursor.executemany(sql,data)    db.commit()    print('成功')
except:    db.rollback()    print('失败') db.close()


得到:

注:此推文中的图片及封面(除操作部分的)均来源于网络!如有雷同,纯属巧合!

以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!

应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~

                                   

             文字编辑:何雪泽

  技术总编:刘贝贝

往期推文推荐:

1.爬虫俱乐部新版块--和我们一起学习Python

2.hello,MySQL--Stata连接MySQL数据库

3.hello,MySQL--odbcload读取MySQL数据

4.再爬俱乐部网站,推文目录大放送!

5.用Stata生成二维码—我的心思你来扫

6.Hello,MySQL-odbc exec查询与更新

7.Python第一天

8.Python第二天

9.事件研究大放送

10.爬虫俱乐部隆重推出网上直播课程第一季



关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:statatraining@163.com

投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

你关注我,我就分你小鱼干呀~


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/I6g9Uer2QC
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/21863
 
1120 次点击