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: