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

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

  1. 数据存储之关系型数据库存储---MySQL存储

    MySQL的存储 利用PyMySQL连接MySQL 连接数据库 import pymysql # 连接MySQL MySQL在本地运行 用户名为root 密码为123456 默认端口3306 db = ...

  2. 【大数据】安装关系型数据库MySQL安装大数据处理框架Hadoop

    作业来源于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3161 1. 简述Hadoop平台的起源.发展历史与应用现状. 列举发展过 ...

  3. 【大数据】安装关系型数据库MySQL 安装大数据处理框架Hadoop

    作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3161 1.安装Mysql 使用命令  sudo apt-get ins ...

  4. [Python3网络爬虫开发实战] 5.3-非关系型数据库存储

    NoSQL,全称Not Only SQL,意为不仅仅是SQL,泛指非关系型数据库.NoSQL是基于键值对的,而且不需要经过SQL层的解析,数据之间没有耦合性,性能非常高. 非关系型数据库又可细分如下. ...

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

    即系IFC数据并存储到关系型数据库中,目前解析的IFC文件是两亿多行,构件数量120万

  6. 第十节:Web爬虫之数据存储与MySQL8.0数据库安装和数据插入

    用解析器解析出数据之后,接下来就是存储数据了,保存的形式可以多种多样,最简单的形式是直接保存为文本文件,如 TXT.JSON.csv 另外,还可以保存到数据库中,如关系型数据库MySQL ,非关系型数 ...

  7. Hadoop生态组件Hive,Sqoop安装及Sqoop从HDFS/hive抽取数据到关系型数据库Mysql

    一般Hive依赖关系型数据库Mysql,故先安装Mysql $: yum install mysql-server mysql-client [yum安装] $: /etc/init.d/mysqld ...

  8. 在ASP.NET Core中如何支持每个租户数据存储策略的数据库

    在ASP.NET Core中如何支持每个租户数据存储策略的数据库 不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻喷,如觉得我翻译有问题请挪步原博客地址 本博文翻译自: ht ...

  9. 【18】如何把数据存储到MongoDB数据库

    如何把数据存储到MongoDB数据库 时间:2018.10.31                   edit by :北鼻 一.mongoDB环境安装 需要使用mongoDB数据库的话需要安装环境, ...

随机推荐

  1. Database 2 Day DBA guide_Chapter3

    Chapter 3: Getting Started with Oracle Enterprise Manager 第三章:开始oracle企业管理器. Purpose(目的) This chapte ...

  2. 【Mysql】—— 报错:Can't call commit when autocommit=true

    java.sql.SQLException: Can't call commit when autocommit=true at com.mysql.jdbc.SQLError.createSQLEx ...

  3. NodeJs安装less(npm方式)

    上一次讲了如何在浏览器端解析less文件,这次是在cmd中使用npm中的less模块来解析 详解如下 首下我们去下载一个https://nodejs.org/en/,   一路next之后,因为文件不 ...

  4. Docker入门系列之三:如何将dockerfile制作好的镜像发布到Docker hub上

    这个系列的前两篇文章,我们已经把我们的应用成功地在Docker里通过nginx运行了起来,并且用dockerfile里制作好了一个镜像. Docker入门系列之一:在一个Docker容器里运行指定的w ...

  5. 基于Qt的相似QQ好友列表抽屉效果的实现

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/shuideyidi/article/details/30619167     前段时间在忙毕业设计, ...

  6. 【翻译】苹果官网的命名规范之 Code Naming Basics-General Principles

    苹果官方原文链接:General Principles 代码命名基本原则:通用规范   代码含义清晰 尽可能将代码写的简洁并且明白是最好的,不过代码清晰度不应该因为过度的简洁而受到影响.例如: 代码 ...

  7. 学大伟业 Day 3 培训总结

    今天讲的字符串: 不多说,直接看题 一.表达式求值 题目大意: 输入一行一个表达式,计算其答案 表达式包含非负整数.加减乘除.括号 两种做法 ·栈 ·表达式树 这里更推荐表达式树,因为栈是先压进去,逆 ...

  8. javascript操作Date对象

    Date 对象用于处理日期和时间. 创建 Date 对象的语法: var myDate=new Date() Date 对象会自动把当前日期和时间保存为其初始值. 参数形式有以下5种: new Dat ...

  9. linux各种抓包情况说明

    大家都知道抓包指令:tcpdump    抓包的主要目的是测试端口.网络协议通不通,以及对抓取的数据包进行分析.测试,抓包对熟悉linux的大神都不陌生,网络对于我来说也是一窍不通,只是在这里记录一下 ...

  10. CALayer简介(转)

    一.简单介绍  在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮,一个文本标签,一个文本输入框,一个图标等等,这些都是UIView.  其实UIView之所以能显示在屏幕上,完全 ...