一、背景
首先我们先来了解一下数据库的背景程序运行的时候,数据都是在内存中的。当程序终止的时候,通常都需要将数据保存到磁盘上,无论是保存到本地磁盘,还是通过网络保存到服务器上,最终都会将数据写入磁盘文件。而如何定义数据的存储格式就是一个大问题,为了便于程序保存和读取数据,而且,能直接通过条件快速查询到指定的数据,就出现了数据库(Database)这种专门用于集中存储和查询的软件。
二、数据库类型
Oracle,典型的高富帅;
SQL Server,微软自家产品,Windows定制专款;
DB2,IBM的产品,听起来挺高端;
Sybase,曾经跟微软是好基友,后来关系破裂,现在家境惨淡。
这些数据库都是不开源而且付费的,最大的好处是花了钱出了问题可以找厂家解决,不过在Web的世界里,常常需要部署成千上万的数据库服务器,当然不能把大把大把的银子扔给厂家,所以,无论是Google、Facebook,还是国内的BAT,无一例外都选择了免费的开源数据库:
MySQL,大家都在用,一般错不了;
PostgreSQL,学术气息有点重,其实挺不错,但知名度没有MySQL高;
sqlite,嵌入式数据库,适合桌面和移动应用。
mongoDB,一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
三、SQLite数据库
1、SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,iOS和Android的App中都可以集成,而Python就内置了SQLite3,所以,在Python中使用SQLite,不需要安装任何东西,直接使用。
2、下面再来认识一下概念:
要操作关系库前,第一个的hi先连接到数据库,称作Connection,之后打开游标,称作Currsor,通过执行SQL语句执行并获得结果。
3、DB-API接口
数据库有很多,我们不可能学一个用一个,所以我们就有了DB-API接口,它可以作为一个标准,简单来说,就是学会它就可以兼容其它的数据库。
4、Python DB-API的内容:
连接对象:
Connect():创建连接:host/server /user/password/db connect方法生成一个connect对象, 我们通过这个对象来访问数据库。符合标准的模块都会实现connect方法。
Cursor():创建游标。系统为用户开通的一个数据缓冲区,用于存放SQL语句执行结果。cursor游标是有状态的,它可以记录当前已经取到结果的第几个记录了,因此,一般你只可以遍历结果集一次。在上面的情况下,如果执行fetchone()会返回为空。这一点在测试时需要注意
Commit():提交当前事务。做出某些更改后确保已经进行了提交,这样才可以将这些修改真正地保存到database中
Rollback() 回滚上一次调用 commit()以来对数据库所做的更改
Close():关闭连接
5、Python DB-API的工作原理及流程
如图所示如果把python 和数据库比作两个不同的地点, connection 就是路, 能连接python和database。cursor就像在路上行驶的小货车, 可以用于执行sql 语句, 以及存储sql 运行的结果。
如图所示如果把python 和数据库比作两个不同的地点, connection 就是路, 能连接python和database。cursor就像在路上行驶的小货车, 可以用于执行sql 语句, 以及存储sql 运行的结果。
6、操作SQLite数据库
访问和操作SQLite数据时,需要首先导入sqlite3模块,然后创建一个与数据库关联的Connection对象:
1 ''' 2 连接到SQLite数据库 3 数据库文件是example.db 4 如果文件不存在,会自动在当前目录创建: 5 ''' 6 import sqlite3 #导入模块 7 conn = sqlite3.connect('example.db') #连接数据库
成功创建Connection对象以后,再创建一个Cursor对象,并且调用Cursor对象的execute()方法来执行SQL语句创建数据表以及查询、插入、修改或删除数据库中的数据:
1 c = conn.cursor() 2 c.execute('''CREATE TABLE stocks (date text, trans text, symbol text, qty real, price real)''') # 创建表 3 c.execute("INSERT INTO stocks VALUES ('2006-01-05','BUY', 'RHAT', 100, 35.14)") # 插入一条记录 4 conn.commit() # 提交当前事务,保存数据 5 conn.close() # 关闭数据库连接
connection对象操作
sqlite3.Connection.execute() | 执行SQL语句 |
sqlite3.Connection.cursor() | 返回游标对象 |
sqlite3.Connection.commit() | 提交事务 |
sqlite3.Connection.rollback() | 回滚事务 |
sqlite3.Connection.close() | 关闭连接 |
cursor对象操作
close() | 关闭游标 |
execute() | 执行SQL语句 |
executemany() | 重复执行多次SQL语句 |
executescript() | 一次执行多条SQL语句 |
fetchall() | 从结果集中返回所有行记录 |
fetchmany() | 从结果集中返回多行记录 |
fetchone() | 从结果集中返回一行记录 |
四、MongoDb数据库
MongoDB是一个基于分布式文件存储的文档数据库,可以说是非关系型(NoSQL,Not Only SQL)数据库中比较像关系型数据库的一个,具有免费、操作简单、面向文档存储、自动分片、可扩展性强、查询功能强大等特点,对大数据处理支持较好,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
MongoDB数据库可以到网站https://www.mongodb.org/downloads下载,安装之后打开命令提示符环境并切换到MongoDB安装目录中的server\3.2\bin文件夹,然后执行命令mongod --dbpath D:\data --journal --storageEngine=mmapv1启动MongoDB,当然需要首先在D盘根目录下新建文件夹data。
让刚才那个命令提示符环境始终处于运行状态,然后再打开一个命令提示符环境,执行mongo命令连接MongoDB数据库,如果连接成功的话,会显示一个>符号作为提示符,之后就可以输入MongoDB命令了。
1 use students #打开或创建数据库students 2 zhangsan = { 'name':'Zhangsan', 'age':18, 'sex':'male'} #在数据库中插入数据 3 db.students.insert(zhangsan) 4 lisi = { 'name':'Lisi', 'age':19, 'sex':'male'} 5 db.students.insert(lisi) 6 db.students.find() #查询数据库中的记录 7 show dbs #查看系统中所有数据库名称
Python扩展库pymongo完美支持MongoDB数据的操作
1 import pymongo #导入模块 2 client = pymongo.MongoClient('localhost', 27017) #连接数据库,27017是默认端口 3 db = client.students #获取数据库 4 db.collection_names() #查看数据集合名称列表 5 ['students', 'system.indexes'] 6 students = db.students #获取数据集合 7 students.find() 89 for item in students.find(): #遍历数据 10 print(item) 11 { 'age': 18.0, 'sex': 'male', '_id': ObjectId('5722cbcfeadfb295b4a52e23'), 'name': 'Zhangsan'} 12 { 'age': 19.0, 'sex': 'male', '_id': ObjectId('5722cc6eeadfb295b4a52e24'), 'name': 'Lisi'}
上述笔记可能有点捞b,还望大神见谅!