Python3爬虫(九) 数据存储之关系型数据库MySQL

Infi-chu:

http://www.cnblogs.com/Infi-chu/

关系型数据库
关系型数据库是基于关系模型的数据库,而关系模型是通过二维表来保存的,所以关系型数据库的存储方式就是行列组成的表。
每一列是一个字段,每一行是一条记录。
表可以看成是摸个实体的集合,而实体之间存在关系,比如主键和外键
常见的关系型数据库有:Oracle、MySQL、SQLite、SQL Server、DB2等

MySQL
在Python2中,MySQL的链接库是MySQLdb,

而在Python3中,官方不支持使用MySQLdb,Python3中使用的是PyMySQL

1.连接数据库

import pymysql
db = pymysql.connect(host=‘127.0.0.1‘,user=‘root‘,password=‘123456‘,port=3306)
cursor=db.cursor()
cursor.execute(‘SELETE VERSION()‘)    # 使用execute方法执行SQL语句
data = cursor.fetchone()    # 使用fetchone()方法获得第一条数据
print(‘Version is :‘,data)
cursor.execute(‘CREATE DATABASE spiders DEFAULT CHARCTER SET uft-8‘)   # 创建spiders数据库,默认编码为UTF-8
db.close()

2.创建表

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

【注】
在实际的爬虫项目中要根据实际情况设计数据库

3.插入数据

import pymysql
id = ‘123‘
user = ‘Infichu‘
age = 23
db = pymysql.connect(host=‘127.0.0.1‘,user=‘root‘,password=‘123456‘,port=3306,db=‘spiders‘)
cursor = db.cursor()
sql = ‘INSERT INTO tests(id,name,age) values(%s,%s,%s)‘
try:
    cursor.execute(sql,(id,user,age))
	db.commit()    # commit()方法,数据库提交
except:
    db.rollback()    # rollback(),数据库回滚
db.close()

事物的4个属性
属性                                                                        描述
原子性(atomicity)             事物是一个不可分割的工作单位,事物中包括的很多操作要么做,要么不做
一致性(consistency)        事物必须使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的
隔离性(isolation)              一个事物的执行不能被其他事物干扰
持久性(durability)            持续性,一个事物一旦提交,他对数据库中数据的改变就应该是永久性的。之后的操作或故障不会对其造成影响

# 通用插入方法
import pymysql
data = {
‘id‘:‘1‘,
‘name‘:‘Infi-chu‘,
‘age‘:23
}
table = ‘tests‘
keys = ‘, ‘.join(data.keys())
values = ‘, ‘.join([‘%s‘*len(data)])
sql = ‘INSERT INTO {table}({keys}) VALUES ({values})‘.format(table=table,keys=keys,values=values)
try:
    if cursor.execute(sql,tuple(data.values())):
	print(‘Successful‘)
except:
    print(‘Failed‘)
	db.rollback()
db.close()

4.更新数据

sql = ‘UPDATE tests SET age=%s WHERE name=%s‘
try:
    cursor.execute(sql,(25,‘Infi-chu‘))
	db.commit()
except:
    db.rollback()
db.close()

# 通用更新方法
import pymysql
data = {
‘id‘:‘1‘,
‘name‘:‘Infi-chu‘,
‘age‘:23
}
table = ‘tests‘
keys = ‘, ‘.join(data.keys())
values = ‘, ‘.join([‘%s‘]*len(data))
# ON DUPLICATE KEY UPDATE 表示如果主键已经存在,就执行更新操作
sql = ‘INSERT INTO {table}({keys}) VALUES ({values}) ON DUPLICATE KEY UPDATE‘.format(table=table,keys=keys,values=values)
update = ‘,‘.join([" {keys}=%s".format(key=key) for key in data])
sql += update
try:
if cursor.execute(sql,tuple(data.values())*2):
print(‘Successful‘)
db.commit()
except:
print(‘Failed‘)
db.rollback()
db.close()

5.删除数据:

table = ‘tests‘
condition = ‘age>20‘
sql = ‘DELETE FROM {table} WHERE {condition}‘.format(table=table,condition=condition)
try:
    cursor.execute(sql)
	db.commit()
except:
	cursor.rollback()
db.close()

6.查询数据:

sql = ‘SELECT * FROM tests WHERE age>=20‘
try:
    cursor.execute(sql)
	print(‘Count:‘,cursor.rowcount)
	one = cursor.fetchone()
	print(‘One:‘,one)
	results = cursor.fetchall()
	print(‘Results:‘,results)
	print(‘Results Type:‘,type(results))
	for row in results:
	    print(row)
except:
    print(‘Error‘)

原文地址:https://www.cnblogs.com/Infi-chu/p/8979673.html

时间: 2024-09-29 22:23:02

Python3爬虫(九) 数据存储之关系型数据库MySQL的相关文章

Python3网络爬虫实战-32、数据存储:关系型数据库存储:MySQL

关系型数据库基于关系模型的数据库,而关系模型是通过二维表来保存的,所以它的存储方式就是行列组成的表,每一列是一个字段,每一行是一条记录.表可以看作是某个实体的集合,而实体之间存在联系,这就需要表与表之间的关联关系来体现,如主键外键的关联关系,多个表组成一个数据库,也就是关系型数据库. 关系型数据库有多种,如 SQLite.MySQL.Oracle.SQL Server.DB2等等. 在本节我们主要介绍 Python3 下 MySQL 的存储. 在 Python2 中,连接 MySQL 的库大多是

解析IFC数据并存储到关系型数据库

即系IFC数据并存储到关系型数据库中,目前解析的IFC文件是两亿多行,构件数量120万 原文地址:https://www.cnblogs.com/herd/p/9191176.html

Android基础之十四数据存储 之 SQLite数据库详解

Android基础之十四数据存储 之 SQLite数据库详解 SQLite 是一款 轻量级的关系型数据库,它的运算速度非常快,占用资源很少,通常只需要几百 K 的内存就足够了,因而特别适合在移动设备上使用. SQLite 不仅支持标准的 SQL 语法,还遵循了数据库的 ACID( 原子性(Atomicity) .一致性(Consistency) . 隔离性(Isolation) . 持久性(Durability))事务,所以只要你以前使用过其他的关系型数据库,就可以很快地上手 SQLite.而

云存储并非关系型数据库的终结者

云计算出现之前,Oracle.MSSQL.MySQL. Postgres等关系型数据库盘踞数据王国大半江山,鲜有能撼动其地位者.但如今信息满天飞的年代改变了这个现状,随着数据访问量急剧增长,关系型数据 库扩展性不足的缺点逐渐暴露出来.虽然通过增加内存.更新数据管理系统等方式可在短期内解决扩展不足问题,但这不符合可持续的发展规律. 由云计算生发而来的云存储技术首先在互联网企业诞生.云存储技术并非特指某项技术,而是一大类技术的统称,它通过集群应用.网格技术或分布式文件系统 或类似网格计算等功能联合起

安装关系型数据库MySQL 安装大数据处理框架Hadoop

安装关系型数据库MySQL 安装大数据处理框架Hadoop 简述Hadoop平台的起源.发展历史与应用现状. 列举发展过程中重要的事件.主要版本.主要厂商: 国内外Hadoop应用的典型案例. (1)Hadoop的介绍: Hadoop最早起源于Nutch,Nutch的设计目标是构建一个大型的全网搜索引擎,包括网页抓取.索引.查询等功能.但随着抓取网页数量的增加,遇到了严重的可扩展性问题——如何解决数十亿网页的存储和索引问题.2003年.2004年谷歌发表的两篇论文为该问题提供了可行的解决方案,即

paip.导入数据英文音标到数据库mysql为空的问题之道解决原理

#---原因:mysql 导入工具的bug #---解决:使用双引号不个音标括起来. 作者 老哇的爪子 Attilax 艾龙,  EMAIL:[email protected] 转载请注明来源: http://blog.csdn.net/attilax from log import * iniLog (r"c:\enWzPhonetic.log") n=0 for line in lines: if(n>100000 ):break; if( not isContain(lin

Android学习之基础知识九 — 数据存储(持久化技术)之使用LitePal操作数据库

上一节学习了使用SQLiteDatabase来操作SQLite数据库的方法,接下来我们开始接触第一个开源库:LitePal.LitePal是一款开源的Android数据库框架,它采用了对象关系映射(ORM)的模式,并将我们平时开发最常用到的一些数据库功能进行了封装,使得不用编写一行SQL语句就可以完成各种建表和增删改查的操作,LitePal的项目主页上也有详细的使用文档,地址是: https://github.com/LitePalFramework/LitePal 一.配置LitePal 要在

运维学python之爬虫中级篇(五)数据存储(无数据库版)

本篇主要介绍,爬取html数据后,将html的正文内容存储为json或csv格式. 1 json格式存储 选定要爬取的网站后,我们利用之前学过的内容,如:Beautiful Soup.xpath等方式解析,来获取我们希望得到的内容. 1.1 获取数据 首先使用urllib访问页面https://www.lagou.com/zhaopin/Python/?labelWords=label获取html内容,代码如下: from urllib import request try: url = 'ht

数据缓存——SQLite关系型数据库的使用

SQLite关系型数据库的使用 Demo下载地址 数据库(Database): 存放数据的仓库, 存放的是一张的表, 特别像Excel, Numbers, 都以表格的形式存放数据, 可以创建多张表. 常见的数据库: sqlite, MySQL, SQLServer, Oracle, Access. 使用数据库,主要是因为文件读写和归档读取数据需要一次把数据全部读出来, 占用内存开销大:其次是数据库数据效率高, 体现在增删改查. 数据库存储数据的步骤 1.新建一个数据库 2.新建一张表(table