python-使用Mysql,MongoDB

数据存储 数据库
SQLite

一个开源的嵌入式关系数据库,实现自包容, 零配置,支持事务的SQL数据库引擎。
特点:高度便携,使用方便,结构紧凑,高效,可靠。单文件数据库引擎,一个文件既是一个数据库。

1.sqlite数据库模块
    import sqlite3
2.创建/打开数据库
    sqlite3模块中使用connect方法创建/开发数据库,需要指定数据库路径,如果数据库存在则打开,不存在则创建一个新的数据库。
        con = sqlite3.connect('D:\test.db')
    还可以在内存中创建
        con = sqlite3.connect(':memory')
3.数据库连接对象
    上面通过connect方法返回的con对象,既是数据库连接对象,提供了以下方法:
        cursor() 用来创建一个游标对象
        commit() 用来事务提交
        rollback() 事务回滚
        close() 关闭一个数据库连接
4.游标对象的使用
    对数据库的查询需要使用到游标对象,首先通过cursor()方法创建一个游标对象:
        cur = con.cursor()
    游标对象有以下方法支持数据库的操作:
        execute() 执行sql语句
        executemany() 执行多条sql语句
        close() 用来关闭执行游标
        fetchone() 用来从结果中取一条记录,并将游标指向下一条记录。
        fetchmany() 用来从结果中取出多条记录
        fetchall() 用来从结果中取出所有记录
        scroll() 用来游标滚动
5.建表
    用游标创建一个person表,包含id, name, age
    cur.execute('CREATE TABLE person (id integer primary key, name varcher(20), age integer)')
6.插入数据
    向person表中插入两天数据
    data = "0, 'qiye', 20"
    cur.execute('INSERT INTO person VALUES (%s)' % data)
    这样容易导致SQL输入问题。
    cur.execute('INSERT INTO person VALUES (?,?,?)', (0, 'qiyi', 20))
    还可以使用executemany()执行多条语句,使用executemany()方法比使用execute()方法执行多条SQL语句效率高很多。
    cur.executemany('INSERT INFO person VALUES(1,2,3)',[{3, 'MANY', 22}, {6, 'TOM', 22}])
    提交
    con.commit()
    回滚
    con.rollback()
7.查询数据
    查询数据
    cur.execute('SELECT * FROM person')
    要提取查询数据,游标对象提供了 fetchall() 和 fetchone()方法。
8.修改和删除
    cur.execute('UPDATE person SET name=? WHERE id=?', ('rose', 1))
    cur.execute('DELETE FROM person WHERE id=?', (0,))
    cur.commit()
    con.close()
执行完所有操作记得关闭数据库,插入或者修改中文数据时,在中文字符串之前加上'u'
MySQl
MySQL基础
MySQL数据类型
    整形:
        tinyint(m)      1个字节(-128~127)
        smallint(m)     2个字节(-32768~32767)
        mediumint(m)    3个字节(-8388608~8388607)
        int(m)          4个字节(-2147483648~2147483647)
        bigint(m)       8个字节
    浮点型:
        float(m,d)      单精度浮点型,8位精度(4字节),m总个数,d小数位
        double(m,d)     双精度浮点型,16位精度(8字节),m总个数,d小数位
    定点型
        decimal(m,d)    定点型时相对于浮点型的,浮点型存放的是近似值,而定点型是精确值。m<65是总个数,d是小数位,d<30且d<m
    字符串
        char(n)         固定长度,最多255个字符
        varchar(n)      可变长度,最多65535个字符,n为存储的最大长度
        tinytext        可变长度,最多255个字符
        text            可变长度,最多65535个字符
        mediumtext      可变长度,最多2的24-1个字符
        longtext        可变长度,最多2的32-1个字符
    二进数据
        tinyblob        0~255字节
        blob            0~65535
        mediumblob      0~16777215
        longblob        0~4294967295
    日期时间类型
        date            日期
        time            时间
        datetime        日期时间
        timestamp       自动存储记录修改时间

MySql关键字
    NULL            数据列可包含NULL值
    NOT NULL        数据列不允许包含NULL值
    DEFAULT         默认值
    PRIMARY KEY     主键
    AUTO_INCREMENT  自动递增
    UNSIGNED        无符号
    CHARACTER SET name  指定一个字符集
Python操作MySQL
模块PyMysql
    import MySQLdb
    MySQLdb.connect(host='ip', user='root', passwd='pass', db='py_test', port=3306, charset='utf8')
数据库连接对象
通过connect方法啊返回的con对象,即是数据库连接对象,提供了以下方法:
    cursor()    创建一个游标对象
    commit()    事务提交
    rollback()  事务回滚
    close()     关闭数据库连接

游标对象的使用
    execute()       执行SQL
    executemany()   执行多条SQL
    close()         关闭游标
    fetchone()      从结果中取一条
    fetchmany()     从结果中取多条数据
    fetchall()      取出所有数据
    scroll()        游标滚动

建表
    cur.execute('CREATE TABLE person (id int not null auto_increment primary key, name varcher(20), age int)')

插入数据
    data = "'qiye', 20"
    cur.execute('INSERT INTO person (name, age) VALUES (%s) '% data)
    cur.execute('INSERT INTO person (name, age) VALUES (%s, %s)', ('qiye', 20))
    cur.execute('INSERT INTO person (name, age) VALUES (%s, %s)', [('marry', 20),('jack', 20)])
    con.commit()
    con.rollback()

查询数据
    cur.execute('SELECT * FROM person')
    res = cur.fetchall()
    for line in res:
        print line

修改和删除数据
    cur.execute('UPDATE person SET name=%s WHERE id=%s', ('rose', 1))
    cur.execute('DELETE FROM person WHERE id=%s', (0,))
    con.commit()
    con.close()
MongoDB

是一个基于分布式文件存储的数据库,提供了可扩展的高性能数据存储解决方案。
是一个介于关系数据库和非关系数据库之间的产品,属于非关系数据库,但是非常像关系型数据库。

MongoDB基础
SQL概念和MongoDB中的概念进行对比
    SQL概念           MongoDB概念           说明
    database         database               数据库
    table            collection             数据库表/集合
    row              document               数据行/文档
    column           field                  数据字段列/域
    index            index                  索引
    primary key      primary key            主键,MongoDB自动将_id字段设置为主键

MongoDB中文档,集合,数据库的概念
    文档:是MongoDB中数据的基本单元(即BSON),类似关系型数据库中的行。文档有唯一的表示'_id',数据库可自动生产。文档以key/value的方式,比如{'name':'tiqi', 'age':20}
         可类比数据表的列名,以及列对应的值。下面通过三个不同的文档来说明文档的特性。
         文档1:  {'name': 'tiqi', 'age': 24, 'email': ['qq_email', '163_email', 'gmail'], 'chat': {'qq': '123456', 'weixin': '654321'}}
         文档2:  {'Name': 'qiye', 'Age': 24, 'email': ['qq_email', '163_email', 'gmail'], 'chat': {'qq': '123456', 'weixin': '654321'}}
         文档3:  {'name': 'qiye', 'email': ['qq_email', '163_email', 'gmail'], 'Age': 24, 'chat': {'qq': '123456', 'weixin': '654321'}}
         特性:
            文档的键值对是有序的,顺序不同文档亦不同
            文档的值可以使用字符串,整数,数组以及文档等类型
            文档的键是用引号标识的字符串(常见的);除个别列外,可用任务UTF-8字符。要求:键不能含有'\0'(空字符串),这个字符串用来标识键的结尾;
                '.'和'$'被保留,存在特别含义最好不要用来命名键名;以'_'开头的键是保留的,建议不要使用。
            文档区分大小写以及数值类型。

    集合:在MongoDB中是一组文档,类似关系型数据库中的数据表。集合存在数据库中,集合没有固定的结构,意味着集合中可以插入不同格式和类型的数据。
        合合法的集合名为:
            集合名不能是空字符串
            集合名不能含有 '\0',这字符标识集合名的结尾。
            集合名不能以 'system'开头,这是为系统集合保留的前缀
            用户创建的集合名字不能含有保留字符。

    数据库:一个MongoDB中可以建立多个数据库,默认数据库为'db'。MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限。

MongoDB常见数据类型
    String:         字符串。存储数据常用的数据类型。在MongoDB中,UTF-8编辑的字符串才是合法的。
    Integer:        整型数值。根据你采用的服务器,可分为32位或64位
    Boolean:        布尔值
    Double:         双精度浮点值
    Min/Max keys    将一个值与BSON(二进制的JSON)元素的最低值和最高值相对比
    Arrays          用于将数组或列表或多个值存储为一个键
    Timestamp       时间戳。记录文档的修改或添加的具体时间
    Object          用于内嵌文档
    Null            用于创建空值
    Symbol          符号,该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。
    Date            日期时间。用UNIX时间格式来存储当前日期或时间
    Object ID       用于创建文档的ID
    Binary Data     二进制数据
    Code            用于在文档中存储JavaScript代码
    Regular expression  正则表达式类型,用于存储正则表达式

创建/删除数据库
    MongoDB创建数据库的语法: use DATABASE_NAME。如果数据库不存在,则创建数据库,否则切换到指定数据库。
    查看所有数据库 show dbs
    MongoDB删除数据库的语法:db.dropDatabase()。此语句删除当前数据库,可以使用db命令查看当前数据库名。

集合中文档的增删改查
    文档的数据结构和JSON基本一致,所有存储在集合中的数据都是BSON格式,BSON是类JSON的一种二进制形式的存储格式。
    插入文档:MongoDB使用insert()或save()方法向集合中插入文档。
        db.python.insert({title: 'python', description: '动态语言', url: 'http://www.python.org', tags: ['动态','编程','脚本'], likes: 100})
        如果该集合不再数据库中,MongoDB会自动创建集合并插入文档。
    查询文档:find()方法从集合中查询文档。
        db.COLLECTION_NAME.find()
        如果需要以易读的方式来读取数据,可以使用pretty()
        db.COLLECTION_NAME.find().pretty()
        db.python.find()
        上面代码用于查出python集合中的所有文档,相当于 select * from table。
        如果想进行条件操作,需要了解一下MongoDB中的条件语句和操作符。
            等于      {<key>:<value>}         db.python.find({'likes':100}).pretty()          查找likes等于100的文档
            小于      {<key>:{$lt:<value>}}   db.python.find({'likes':{$lt:100}}).pretty()    查找likes小于100的文档
            小于或等于 {<key>:{$lte:<value>}}  db.python.find({'likes':{$lte:100}}).pretty()   查找likes小于或等于100的文档
            大于      {<key>:{$gt:<value>}}   db.python.find({'likes':{$gt:100}}).pretty()    查找likes大于100的文档
            大于或等于 {<key>:{$gte:<value>}}  db.python.find({'likes':{$gte:100}}).pretty()   查找likes大于或等于100的文档
            不等于    {<key>:{$ne:<value>}}   db.python.dinf({'likes':{$ne:100}}).pretty()    查找likes不等于100的文档
        条件组合 类似 and 和 or
        MongoDB的find()方法可以传入多个键(key),每个键以逗号隔开,来实现AND条件。
            db.COLLECTION_NAME.find({key1:value1, key2:value2}).pretty()
        查找python集合中likes大于等于100且title等于python的文档
            db.python.find({'likes': {$gte:100}, 'title':'python'}).pretty()

        OR条件语句使用了关键字 $or 语法格式:
            db.COLLECTION_NAME.find({$or:[{'likes': {$gte:100}}, {'title': 'python'}]}).pretty()

        AND和OR条件可以联合使用
            db.python.find({'likes': {$gt:50}, $or: [{'description': '动态语言'}, {'title':'python'}]}).pretty()

更新文档 MongoDB使用update()和save()方法来更新集合中的文档。
    update方法原型
        db.python.update(query, update, {upsert: boolean multi: boolean writeConcern: document})
    参数分析:
        query: update的查询条件,类似where字句。
        update:update的对象和一些更新的操作符等,类似于set后面的内容
        upsert:可选,这个参数的意思是如果不存在update的记录,是否插入新的文档,ture为插入,默认是false
        multi:可选 mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新
        writeConcern: 可选,抛出异常的级别。
    修改title为python的文档修改为 'python 爬虫'
        db.python.update({'title': 'python'}, {$set:{'title': 'python爬虫'}})

    save()方法通过传入的文档来替换已有文档,方法原型
        db.python.save(document, {writeConcern: document})
    参数分析
        document:文档数据
        writeConcern:可选,抛出异常的级别
    更具id替换一下文档数据
        db.python.save({'_id': ObjectId('632c0d69814400000d0064aa'), 'title': 'Mongodb', 'description': '数据库', 'url':'http://www.python.org' ,'tag':['分布式','mongo'], 'likes': 100})

删除稳定:
    remove()方法来删除文档,函数原型
        db.collection.remove(query, {justOne: boolean, writeConcern: document})
    参数说明:
        query:可选,删除的文档的条件
        justOne:可选,如果设为true或1,则只删除一个文档
        writeConcern:可选,抛出异常级别。
    删除title等于Mongodb的文档
        db.python.remove({'title','Mongodb'})
    如果没有query条件,意味着删除所有文档
Python操作MongoDB
导入pymongo数据库模块
    import pymongo
建立连接
    pymongo模块使用MongoClient对象来描述一个数据库客户端,创建对象所需的参数主要是 host和port。常见的有三种形式
        client = pymongo.MongoClient()
        client = pymongo.MongoClient('localhost', 27017)
        client = pymongo.MongoClient('mongodb://localhost:27017/')
        第一种方式是连接默认的主机IP和端口,第二种指定ip和端口,第三种是采用URL格式进行连接。
获取数据库
    一个MongoDB实例可以支持多个独立的数据库。使用pymongo时,可以通过访问MongoClient的属性方法来访问数据库
        db = client.papers
    如果数据库名字导致属性访问方式不能用(比如 pa-pers),可以通过字典的方式访问数据库:
        db = client['pa-pers']
获取一个集合
    一个collection指一组存在于MongoDB中的文档,获取Collection方法与获取数据库方法一直
        collection = db.books   或者  collection = db['books']
        需要强调的一点是,MongoDB里的collection和数据库都是惰性创建的,之前的所有命令没有对MongoDB Server进行任何操作。直到第一个文档插入后,才会创建,这就是为什么在不插入文档之前,使用show dbs查不到之前创建的数据库。
插入文档
    数据在MongoDB中以JSON类文件的形式保存起来的,PyMongo中用字典来代表文档,使用insert_many()或 insert_one()方法插入文档  前者新增多条,后者新增一条
        book = [{'author': 'Mike', 'text': 'My First book!', 'tags': ['爬虫', 'python', '网络'], 'date': datetime.datetime.utcnow()},
                {'author': 'qiye', 'text': 'My sec book!', 'tags': ['java', 'vue', 'js'], 'date': datetime.datetime.utcnow()}]
        books_id = collection.insert_many(books)
查询文档
    MongoDB中最基本的查询就是find_one。返回一个符合查询的文件,或者在没有匹配的时候返回None
        collection.find_one()
        返回结果是一个之前插入的符合条件的字典类型值。注意,返回的文件里已经有了_id这个键值,是数据库自动添加的。
        find_one()还支持对特定元素进行匹配查询。例如筛选出author为qiyi的文档
            collection.find_one({'author': 'qiye'})
        通过_id也可以进行查询,book_id就是返回的id对象,类型为ObjectId。
            collection.find_one({'_id':ObjectId('xxxx')})
        如果想获取多个文档,可以使用find()方法。find()方法返回一个cursor实例,通过它可以获取每个符合查询条件的文档
            for book in collection.find():
                print(book)
        与 find_one()时候相同,可以传入条件来限制查询结果。
            for book in collection.find({'author': 'qiye'}):
                print(book)
        如果想直接查询多少文件,可以用limit()操作,而不必进行完整的查询
            collection.find({'author': 'qiye'}).可以用limit(1)
修改文档
    MongoDB可以使用update_one(),update_many方法来更新文档,和之前在MongoDB shell中的操作类似。
        collection.update_one({'author': 'qiye'}, {'$set':{'text': 'python book'}})

删除文档
    MongoDB使用delete_one(),delete_many()方法
        collection.delete_one({'author': 'qiye'})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值