今天在写爬虫时候,爬完数据进行保存时候,不知道选择何种数据库以及如何操作,在网上找了一堆资料,结合自己需要,写下这边日记,方便后面自己回想,这里推荐一个博主写的,个人比较完善,有兴趣的可以去学习一波
https://www.jianshu.com/p/4e72faebd27f
数据库选择
目前,数据库主要有两种形式,一种是非关系型数据库,另一种是关系型数据库。目前,我们用得非常广泛的一种数据库类型是关系型数据库,它可以分为以下几种:
Oracle:
付费产品,主要是银行在用(万一出错了有Oracle背锅)
SQL Sever:
付费产品,微软产品,windows专用
PostgreSQL:
免费产品,主要是高校学术上使用
MySQL:
大众,免费,开源,不过现在被Oracle 收购了,以后不知道会不会收费,趁着现在免费先用着吧
术语
数据库: 数据库是一些关联表的集合。
数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
列: 一列(数据元素) 包含了相同类型的数据, 例如邮政编码的数据。
行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
外键:外键用于关联两个表。
复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
MySQL 安装
这里不再赘述,网上资料很多,这里给个链接,可以去学习:https://www.runoob.com/mysql/mysql-install.html
Python 连接
驱动安装
目前,关于Python操作数据库主要有以下几种方法,通过模块调用:
MySQLdb的使用
MySQLdb是用于Python连接MySQL数据库的接口,它实现了Python数据库API规范V2.0,基于MySQL C API上建立的,目前只支持Python2.x。
PyMySQL的使用
PyMySQL是Python中用于连接MySQL服务器的一个库,它支持Python3.x,是一个纯Python写的MySQL客户端,它的目标是替代MySQLdb。PyMySQL在MIT许可下发布。
mysql.connector
由于 MySQL 服务器以独立的进程运行,并通过网络对外服务,所以,需要支持 Python 的 MySQL 驱动来连接到 MySQL 服务器。
目前,有两个 MySQL 驱动:
mysql-connector-python:是 MySQL 官方的纯 Python 驱动
mysql-connector :不建议这个,8.0以下会提示“authentication plugin 'calling_sha2_password' is not supported”
SQLAlchem
是一种ORM(Object-Relational Mapping)框架,将关系数据库的表结构映射到对象上,隐藏了数据库操作背后的细节,简化了数据操作。
数据库连接
import mysql.connector # 导包
#连接数据库
mydb = mysql.connector.connect(
host="localhost",
user="root",
passwd="Pass1234",
database="cnblog"
)
mycursor = mydb.cursor() #游标
# 检查一个表是否存在
def tableExists(mycursor, name):
stmt = "SHOW TABLES LIKE '"+name+"'"
mycursor.execute(stmt)
return mycursor.fetchone()
# 删除一个表(无论它是否已经存在)
def dropTable(mycursor, name):
stmt = "DROP TABLE IF EXISTS "+name
mycursor.execute(stmt)
# buffered=True 不设的话,查询结果没有读完会报错
# raise errors.InternalError("Unread result found")
mycursor = mydb.cursor(buffered=True)
# 删除临时表
tableName = 'tmp'
dropTable(mycursor, tableName)
# 创建一个表
mycursor.execute("CREATE TABLE user (id INT AUTO_INCREMENT PRIMARY KEY,\
name VARCHAR(255), address VARCHAR(255), \
sex VARCHAR(225), age INT(10))")
增、删、查、改
1增 (用的是"INSERT INTO"语句)
# 往表里插入一条记录
sql="INSERT INTO user (name,address,sex,age) VALUES(%s, %s,%s,%s)"
val = ("xiaoming", "beijing","M",23)
mycursor.execute(sql, val) # 这里
# 往表里插入多条记录
val=[("xiaolan","shanghai","M",35),
("xinyi","hefei","M",28),
("jide","nanjing","F",30)
]
mycursor.executemany(sql, val) # many
# 提交
mydb.commit()
2删 DELETE
包含两部分 ,删除表格和删除表记录
#删除名字为xiaoming的表记录
sql="DELETE FROM user WHERE name='xiaoming'"
mycursor.execute(sql)
mydb.commit()
# 删除表格
sql= "DROP TABLE IF EXISTS user"
mycursor.execute(sql)
mydb.commit()
3查 SELECT
这是用的最多的功能,包含普通查询、条件查询、聚合查询等
例如:
#查询这里面所有的人:
sql="SELECT * FROM user"
mycursor.execute(sql)
myresult = mycursor.fetchall() # fetchall()表示的是获得所有记录;fetchone()表示只获取一条数据;fetchmany(size=2)表示获取两条记录
for x in myresult:
print(x)
# 条件查询WHERE
sql="SELECT * FROM user WHERE age > 30"
mycursor.execute(sql)
myresult = mycursor.fetchall() # fetchall() 获取所有记录
for x in myresult:
print(x)
# 模糊搜索查询 LIKE
#%代表零个、一个或者多个数字或字符
#_代表一个单一的数字或者字符
sql = "SELECT * FROM user WHERE name LIKE '%t%'"
mycursor.execute(sql)
myresult=mycursor.fetchall()
for x in myresult:
print(x)
# 限制性排序查询 LIMIT
#找出其中年龄最大的3个人
sql = "SELECT * FROM user ORDER BY age DESC LIMIT 3"
mycursor.execute(sql)
myresult=mycursor.fetchall()
for x in myresult:
print(x)
4修改表记录 UPDATE
# 将xiaoming改为huiyuanai
sql="UPDATE customers SET name='huiyuanai' WHERE name ='xiaoming'"
mycursor.execute(sql)
mydb.commit()
本文介绍了Python+MySQL的基本操作,包括如何创建连接以及对数据库进行增删改查等操作。但是,本文涉及到的只是对单表进行操作,只是数据库操作的冰山一角;在实际的开发和工作环境中,需要根据实际内容对多表进行操作.