SQL数据库和MongoDb数据库学习笔记

一、背景

首先我们先来了解一下数据库的背景程序运行的时候,数据都是在内存中的。当程序终止的时候,通常都需要将数据保存到磁盘上,无论是保存到本地磁盘,还是通过网络保存到服务器上,最终都会将数据写入磁盘文件。而如何定义数据的存储格式就是一个大问题,为了便于程序保存和读取数据,而且,能直接通过条件快速查询到指定的数据,就出现了数据库(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接口

SQL数据库和MongoDb数据库学习笔记_第1张图片

 

数据库有很多,我们不可能学一个用一个,所以我们就有了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的工作原理及流程

SQL数据库和MongoDb数据库学习笔记_第2张图片

如图所示如果把python 和数据库比作两个不同的地点, connection 就是路, 能连接python和database。cursor就像在路上行驶的小货车, 可以用于执行sql 语句, 以及存储sql 运行的结果。

SQL数据库和MongoDb数据库学习笔记_第3张图片

如图所示如果把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()
 8 
 9 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,还望大神见谅!

 

转载于:https://www.cnblogs.com/liyanyinng/p/10922204.html

你可能感兴趣的:(数据库,python,嵌入式)