SQL语法
两个部分:数据定义语言(DDL)和数据操作语言(DML)
前者用于创建或删除表格,定义索引,规定链接,施加约束
后者用于增删改查
SQL语法对大小写不敏感
primary key
关键词DISTINCT
加在 SELECT
之后,用于合并重复值
有条件查找用到where
子句
还可以使用and
与or
以及括号进行合并查找
排序则需要用到ORDER BY
语句,默认按照ASC
升序,可以改为DESC
降序
update table_name set col_name=new_val where col_2 = val
delete from table_name where col=val
删除某个记录
insert into table_name(col1,col2...) values(val1,val2,...)
SQLite
.schema [table]
显示表结构
.tables
显示所有表和视图
.indices
获取指定表的索引列表
.output [filename]
.dump
.output stdout
导出数据库到SQL文件
.read [filename]
从SQL文件导入数据库
SQLite事务
begin transaction
:启动事务处理
commit
:提交更改 也可使用end transaction
rollback
:回滚所做更改
这些命令只能与DML使用,对于创建和删除表数据库自动commit无法回滚
python操作SQLite
使用sqlite3模块
注:对于查询语句不需要con.commit
,插入或修改中文数据时在中文字符串前加上‘u’
MySQL
创建库与表
create database database_name [character set gbk]
编码设为gbk
使用数据库 use database_name
若担心语句过长,可以保存为sql文件,并使用以下方式执行sql
在登录MySQL时输入: mysql -D database_name -u user_name -p < sql_file_location
或登录之后,输入:source sql_file_location
或者 \. sql_file_location
增删改查
insert into
update set where
select from
delete from where
对表结构操作
删除drop
常用命令
- 连接MySQL
- 连接本机
mysql -u name -p
- 远程主机
mysql -h ip_addr -u name -p password
- 连接本机
- 修改密码
mysqladmin -u name -p old_p password new_p
- 增加新用户
grant 权限1,权限2.... on database_name.table_name to user_name@user_ip identified by 'new_password'
- 显示数据库
show database
- 备份数据库或表
mysqldump -h 主机名 -P 端口 -u user_name -p password -database 数据库名[表名]>文件.sql
python操作mysql
- Python2中使用模块
MySQLdb
;在Python3中使用模块pymysql
,基本功能相同 - 打开数据库
con=pymysql.connect(host='localhost',user='root',passwd='',db='',port=3306,charset='utf-8')
- 数据库连接对象con
cursor()
创建一个游标对象
commit()
事务提交
rollback()
事务回滚
close()
关闭一个数据库连接 - 游标对象使用与SQLite相同
- 建表使用cur.execute
- 插入数据与sqlite一样不能使用一个字符串作为执行语句,容易导致sql注入,应该使用
%s
占位符,具体方式与sqlite相同,同样需要使用commit()
提交后生效 - 查询修改与删除和sqlite相同
MongoDB
基于分布式文件存储的数据库,非关系型数据库但很像关系型数据库,更适合爬虫。
MongoDB的安装
参见14.1
MongoDB基础
属于NoSQL数据库,与SQL概念对比
**文档:**基本数据单元(BSON)文档有唯一标识_id
,数据库自动生成,以key/value方式组织文档;文档键值对有序,顺序不同文档不同;值可以使用字符串,整型,列表,文档等类型;键名不能有\0(空字符)
,其用来标识键尾,.
和$
被保留,不能以_
开头;区分大小写及类型
**集合:**没有固定结构,可以插入不同格式和类型的数据;集合名不能为空字串;不含有\0
标识集合名结尾;不能以system.
开头;不能含有保留字符
**数据库:**一个MongoDB实例中有多个数据库,默认数据库为“db”
常见数据库类型
创建删除数据库与集合文档增删改查
use database_name
使用指定数据库,如果没有则会创建,但在使用show dbs
时,如果数据库没有数据,就显示不出来。
db.dropDatabase()
删除当前数据库
文档的数据结构和JSON基本相同,BSON是JSON的一种二进制存储格式。
db.collection_name.insert()
或db.collection_name.save()
插入一个字典(文件),自动创建不存在的集合
db.collection_name.find()
进行查询,后面加上.pretty()
使得输出更易读
db.collection_name.update(query, update,{upsert:bool,multi:bool,writeConcern:document})
或db.collection_name.save(document,{writeConcern:document})
来更新,
save()更新方法需要使用分配的_id
db.collection_name.remove(query,{justOne:bool, writeConcern:document})
进行删除
python操作MongoDB
使用pymongo模块
建立连接: client = pymongo.MongoClient()或MongoClient(‘localhost’,‘27017’)或MongoClient('mongodb://localhost:27017/)
获取数据库: 以属性方式获取数据库,如client.test或client[‘paper’];获取文档的方式与之一致
插入文档: collection_name.insert(document) 可多个值以列表的形式插入,返回_id值,可自己赋予,也可自动创建
查询文档: collection_name.find_one(query) 匹配query查询或使用find()获取多个文档,返回一个Cursor实例,以迭代方式读取,find().count()则查询文件数量
修改和删除分别使用update和remove