以SQLite和PySqlite为例来学习Python DB API


Posted in Python onFebruary 05, 2020

Python应用编程需要用到的针对不同数据库引擎的数据库接口:http://wiki.python.org/moin/DatabaseInterfaces

Python标准的DB API 2.0见:http://www.python.org/dev/peps/pep-0249/

本文将以SQLite和PySqlite为例来学习Python DB API。

pysqlite是一个sqlite为python 提供的api接口,它让一切对于sqlit的操作都变得异常简单。

从Python2.5起,pysqlite作为Python的一个标准模块。在使用标准库时,它被简称为sqlite3模块。

sqlite3标准库,详见:http://docs.python.org/3.3/library/sqlite3.html

基本的学习内容如下:

1.创建一张表

# filename:create.py
import sqlite3

# 创建连接对象
conn = sqlite3.connect('E:/code/py/db/test.db')

# 创建一个游标对象
cur = conn.cursor()

# 创建数据表的sql语句
createtb_sql = """create table test(
id integer,
name text,
age integer);"""

# 调用execute()执行create_sql语句
cur.execute(createtb_sql)

# 关闭游标
cur.close()
# 关闭连接
conn.close()

2.简单的插入数据

# filename:insert.py
import sqlite3

# 创建连接对象
conn = sqlite3.connect('E:/code/py/db/test.db')

# 创建一个游标对象
cur = conn.cursor()

# 向数据表中插入数据的sql语句
'''
insert_sql = """
insert into test values(1, 'huhu', 20);
insert into test values(2, 'hengheng', 18);
insert into test values(3, 'huahua', 18);
"""
'''

insert_sql = """
insert into test values(1, 'huhu', 20);
"""

# 调用execute()执行insert sql语句
# execute一次只能执行一条语句
cur.execute(insert_sql)

# 提交事务
conn.commit()
# 关闭游标
cur.close()
# 关闭连接
conn.close()

3.查询

# filename:select.py
import sqlite3

# 创建连接对象
conn = sqlite3.connect('E:/code/py/db/test.db')

# 创建一个游标对象
cur = conn.cursor()

# 查询数据表的sql语句
select_sql = """ select * from test;"""

# 调用execute()执行select sql语句
cur.execute(select_sql)

'''
while True:
  # fetchone()把查询的结果集的下一行作为序列或者None
  row = cur.fetchone()
  if row == None:
    break
  print(row)
'''

'''
# fetchall()把查询的结果集的所有行作为序列的序列
for row in cur.fetchall():
  print(row)
'''

# 迭代对象遍历
for row in cur:
  print(row)

# 关闭游标
cur.close()
# 关闭连接
conn.close()

4.删除数据

# filename:delete.py
import sqlite3

# 创建连接对象
conn = sqlite3.connect('E:/code/py/db/test.db')

# 创建一个游标对象
cur = conn.cursor()

# delete语句
delete_sql = """delete from test"""

# execute()执行sql语句
cur.execute(delete_sql)

# commit()提交事务
conn.commit()

# 关闭游标
cur.close()
# 关闭连接
conn.close()

以上四步的运行结果:

以SQLite和PySqlite为例来学习Python DB API

5.一次插入多条数据

# filename:insertmany.py
import sqlite3

# 创建连接对象
conn = sqlite3.connect('E:/code/py/db/test.db')

# 创建一个游标对象
cur = conn.cursor()

# 向数据表中插入数据的sql语句
insert_sql = """insert into test values(?, ?, ?)"""

# 调用execute()执行insert sql语句
# execute一次只能执行一条语句
for line in open('E:/code/py/db/data.txt'):
  fields = line.split(',')
  vals = [f for f in fields]
  cur.execute(insert_sql,vals)

# 提交事务
conn.commit()
# 关闭游标
cur.close()
# 关闭连接
conn.close()

data.txt:

1,huhu,18
2,hengheng,18
3,lq,20

运行结果:

以SQLite和PySqlite为例来学习Python DB API

6.插入数据的方法(参数绑定,executemany的使用):

# inserts.py
import sqlite3

# 创建连接对象
conn = sqlite3.connect('E:/code/py/db/test.db')

# 创建一个游标对象
cur = conn.cursor()

# 向数据表中插入数据的sql语句
# 最简单的insert形式
insert_sql1 = """insert into test values(1, 'huhu', 20);"""
# execute()一次只能执行一条语句
cur.execute(insert_sql1)

# 参数绑定
# execute()第二个参数:位置参数或者字典类型参数
insert_sql2 = """insert into test values(?, ?, ?)"""
cur.execute(insert_sql2, (2,'hengheng',18))
insert_sql3 = """insert into test values(:id, :name, :age)"""
cur.execute(insert_sql3, {'id':3, 'name':'lq', 'age':18})

# executemany()第二个参数:列表类型参数,适用于迭代器和生成器
l = [(4, 'huhu', 18), (5, 'hh', 18), (6, 'lq', 18)]
cur.executemany(insert_sql2, l)

# 利用生成器实现
def l_generator():
  l = [(7, 'huhu', 18), (8, 'hh', 18), (9, 'lq', 18)]
  for t in l:
    yield(t)

cur.executemany(insert_sql2, l_generator())

# 提交事务
conn.commit()
# 关闭游标
cur.close()
# 关闭连接
conn.close()

运行结果:

以SQLite和PySqlite为例来学习Python DB API

7.带条件的的update、delelte和select语句

(1)update

# filename:update.py
import sqlite3

# 创建连接对象
conn = sqlite3.connect('E:/code/py/db/test.db')

# 创建一个游标对象
cur = conn.cursor()

# update语句
update_sql = """update test set name = 'noname' where id = ?"""

# execute()和executem()执行sql语句
x = (1, )
cur.execute(update_sql, x)
y = (2, )
cur.execute(update_sql, y)
l = [(3, ),(4, ),(5, )]
cur.executemany(update_sql, l)

# commit()提交事务
conn.commit()

# 关闭游标
cur.close()
# 关闭连接
conn.close()

运行结果:

以SQLite和PySqlite为例来学习Python DB API

(2)delete

# filename:delete1.py
import sqlite3

# 创建连接对象
conn = sqlite3.connect('E:/code/py/db/test.db')

# 创建一个游标对象
cur = conn.cursor()

# delete语句
delete_sql = """delete from test where id = ?"""

# execute()和executemany()执行sql语句
cur.execute(delete_sql, (1, ))
cur.executemany(delete_sql, [(2, ), (3, )])

# commit()提交事务
conn.commit()

# 关闭游标
cur.close()
# 关闭连接
conn.close()

运行结果:

以SQLite和PySqlite为例来学习Python DB API

(3)select

# filename:select1.py
import sqlite3

# 创建连接对象
conn = sqlite3.connect('E:/code/py/db/test.db')

# 创建一个游标对象
cur = conn.cursor()

# 查询数据表的sql语句
select_sql = """ select * from test where id = ?;"""
# 调用execute()执行select sql语句
x = (8, )
cur.execute(select_sql, x)

'''
# 在executemany中,不能执行select语句
y = [(2, ), (3, )]
cur.executemany(select_sql, y)
'''

# 迭代对象遍历
for row in cur:
  print(row)

# 关闭游标
cur.close()
# 关闭连接
conn.close()

运行结果:

以SQLite和PySqlite为例来学习Python DB API

sqlite3标准库相比Python DB API 2.0,增加了一个较为方便的函数executescript函数(一次可以执行多条sql),介绍如下:

This is a nonstandard convenience method for executing multiple SQL statements at once. It issues a COMMIT statement first, then executes the SQL script it gets as a parameter.

sql_script can be an instance of str or bytes.

Example:

import sqlite3

con = sqlite3.connect(":memory:")
cur = con.cursor()
cur.executescript("""
  create table person(
    firstname,
    lastname,
    age
  );

  create table book(
    title,
    author,
    published
  );

  insert into book(title, author, published)
  values (
    'Dirk Gently''s Holistic Detective Agency',
    'Douglas Adams',
  );
  """)

好了这篇文章就为大家介绍到这了,希望大家以后多多支持三水点靠木。

Python 相关文章推荐
Python中asyncore的用法实例
Sep 29 Python
详解python之多进程和进程池(Processing库)
Jun 09 Python
Python中使用支持向量机(SVM)算法
Dec 26 Python
PyQt5+requests实现车票查询工具
Jan 21 Python
Python中时间datetime的处理与转换用法总结
Feb 18 Python
Django基础三之视图函数的使用方法
Jul 18 Python
python虚拟环境的安装和配置(virtualenv,virtualenvwrapper)
Aug 09 Python
基于Python和PyYAML读取yaml配置文件数据
Jan 13 Python
python关于变量名的基础知识点
Mar 03 Python
工程师必须了解的LRU缓存淘汰算法以及python实现过程
Oct 15 Python
Cpython解释器中的GIL全局解释器锁
Nov 09 Python
golang特有程序结构入门教程
Jun 02 Python
Python操作Sqlite正确实现方法解析
Feb 05 #Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
Feb 05 #Python
Tensorflow累加的实现案例
Feb 05 #Python
详谈tensorflow gfile文件的用法
Feb 05 #Python
TensorFlow实现从txt文件读取数据
Feb 05 #Python
TensorFlow 读取CSV数据的实例
Feb 05 #Python
Python tkinter和exe打包的方法
Feb 05 #Python
You might like
如何用php生成扭曲及旋转的验证码图片
2013/06/07 PHP
解析php常用image图像函数集
2013/06/24 PHP
php的数组与字符串的转换函数整理汇总
2013/07/18 PHP
php动态绑定变量的用法
2015/06/16 PHP
为JavaScript提供睡眠功能(sleep) 自编译JS引擎
2010/08/16 Javascript
背景图跟随鼠标移动的Mootools插件实现代码
2011/12/12 Javascript
iframe异步加载实现点击左边菜单加载右边内容实例讲解
2013/03/04 Javascript
Javascript写入txt和读取txt文件示例
2014/02/12 Javascript
AngularJS 表达式详细讲解及实例代码
2016/07/26 Javascript
深入学习js瀑布流布局
2016/10/14 Javascript
基于原生js淡入淡出函数封装(兼容IE)
2016/10/20 Javascript
AngularJS基于ui-route实现深层路由的方法【路由嵌套】
2016/12/14 Javascript
Node.js 异步异常的处理与domain模块解析
2017/05/10 Javascript
jquery使用iscorll实现上拉、下拉加载刷新
2017/10/26 jQuery
JavaScript中的一些隐式转换和总结(推荐)
2017/12/22 Javascript
Angular4 ElementRef的应用
2018/02/26 Javascript
使用json-server简单完成CRUD模拟后台数据的方法
2018/07/12 Javascript
微信小程序列表中item左滑删除功能
2018/11/07 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
2019/09/18 Javascript
ES6使用 Array.includes 处理多重条件用法实例分析
2020/03/02 Javascript
node.js 如何监视文件变化
2020/09/01 Javascript
Python的函数的一些高阶特性
2015/04/27 Python
Python爬虫工程师面试问题总结
2018/03/22 Python
NumPy 数学函数及代数运算的实现代码
2018/07/18 Python
在PyCharm中三步完成PyPy解释器的配置的方法
2018/10/29 Python
python3 面向对象__类的内置属性与方法的实例代码
2018/11/09 Python
Python中zip函数如何使用
2020/06/04 Python
基于python图书馆管理系统设计实例详解
2020/08/05 Python
Python实现Canny及Hough算法代码实例解析
2020/08/06 Python
CSS3实现曲线阴影和翘边阴影
2016/05/03 HTML / CSS
CSS3按钮鼠标悬浮实现光圈效果源码
2016/09/11 HTML / CSS
List、Map、Set三个接口,存取元素时,各有什么特点?
2015/09/27 面试题
业务部门经理岗位职责
2014/02/23 职场文书
库房保管员岗位职责
2014/04/07 职场文书
合理化建议书
2015/02/04 职场文书
Python3 使用pip安装git并获取Yahoo金融数据的操作
2021/04/08 Python