Python操作SQLite/MySQL/LMDB数据库的方法

  

  

1.1前言   

最近在存储字模图像集的时候,需要学习LMDB,趁此机会复习了SQLite和MySQL的使用,一起整理在此。

  

1.2环境   

使用这个主题,Python 3.5.2。

  

  

2.1准备
  

  

SQLite是一种嵌入式数据库,它的数据库就是一个文件.Python 2.5 x以上版本内置了SQLite3,使用时直接进口SQLite3即可。

  

2.2操作流程

  

概括地讲,操作SQLite的流程是:

  

·通过sqlite3.open()创建与数据库文件的连接对象连接

  

·通过connection.cursor()创建光标对象光标

  

·通过cursor.execute()执行SQL语句

  

·通过connection.commit()提交当前的事务,或者通过cursor.fetchall()获得查询结果

  

·通过connection.close()关闭与数据库文件的连接

  

详细的sqlite3模块API可以看这里:SQLite - Python

  

总结起来就是用cursor.execute()执行SQL语句,改变数据(插入,删除,修改)时用connection.commit()提交变更,查询数据时用cursor.fetchall()得到查询结果。

  

2.3操作实例

  

2.3.1建立数据库与建立表

        #?usr/bin/env python3   # - * -编码:utf - 8 - *   #作者:马邑村   #博客:http://www.cnblogs.com/mayi0312/日期:2019-11-07   #名称:test01   #软件:PyCharm   #注意:   进口sqlite3   #创建连接   康涅狄格州=sqlite3.connect (“test.db”)   #创建光标   坏蛋=conn.cursor ()   #执行(创建数据表的)SQL语句   cur.execute(如果不存在“创建表学生(sid整数主键名称文本)”)   #提交   conn.commit ()   #关闭连接   conn.close ()      

这里康涅狄格州是与数据库文件test.db的连接对象,坏蛋是康涅狄格州的光标对象,通过cur.execute()执行建表操作,创建了简单的学生信息表(学号,名字),通过conn.commit()提交,最后用conn.close()关闭连接。

  

创建连接时,发现数据库文件不存在时会自动创建,这里使用了文件“test.db”,也可以使用”:记忆:“建立内存数据库。

  2.3.2

插入,删除,修改
  

  

为了便于多次运行,直接使用了内存数据库:

        #?usr/bin/env python3   # - * -编码:utf - 8 - *      #作者:马邑村   #博客:http://www.cnblogs.com/mayi0312/日期:2019-11-07   #名称:test01   #软件:PyCharm   #注意:   进口sqlite3         #创建链接   康涅狄格州=sqlite3.connect(“:记忆:”)   #创建光标   坏蛋=conn.cursor ()   #执行(创建数据表的)SQL语句   cur.execute(“创建表的学生(sid整数主键名称文本)”)   #执行(插入)SQL语句   学生cur.execute(“插入值(& # 63;& # 63;)”(1,“爱丽丝”))   学生cur.execute(“插入值(& # 63;& # 63;)”“Bob”, (2))   学生cur.execute(“插入值(& # 63;& # 63;)”“彼得”),(3)   #执行(查询)SQL语句   cur.execute (“SELECT * FROM学生”)   打印(cur.fetchall()) #[(1,“爱丽丝”),(2,“鲍勃”),(3,“彼得”)]   #执行(删除)SQL语句   cur.execute(“删除从学生sid=& # 63;”(1))   #执行(查询)SQL语句   cur.execute (“SELECT * FROM学生”)   打印(cur.fetchall()) #(2,“鲍勃”),(3,“彼得”)]   #执行(修改)SQL语句   cur.execute(“更新学生集名称=& # 63;sid=& # 63;”,(“马克”,3))   #执行(查询)SQL语句   cur.execute (“SELECT * FROM学生”)   打印(cur.fetchall()) #(2,“鲍勃”),(3,“马克”)]   #关闭链接   conn.close ()   
     

做的事情还就非常简单易懂的,向学生信息表中插入(爱丽丝),(2,鲍勃),(彼得)三条记录,删除(爱丽丝),修改(彼得)为(3,马克)。插入,删除,修改后查询数据库中的内容并打印出来。

  

" & # 63; "是sqlite3中的占位符,执行时,会用第二个参数元组里的元素按顺序替换。官方文档里建议出于安全考虑,不要直接用Python做字符串拼接。

  

另外,注意不需要每次执行后调用提交。

  

2.3.3查询
  

  

直接用上面的代码:

        #执行(查询)SQL语句   cur.execute (“SELECT * FROM学生”)   打印(cur.fetchall()) #(2,“鲍勃”),(3,“彼得”)]   fetchall()返回的是记录数组,可能通过在子句做更细致的选择。      

  

  

3.1准备
  

  

安装MySQL:略(百度)

  

安装pymysql:

Python操作SQLite/MySQL/LMDB数据库的方法