以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实现的几个常用排序算法实例
Jun 16 Python
Python中字符串的常见操作技巧总结
Jul 28 Python
Python中super函数的用法
Nov 17 Python
使用Python写一个小游戏
Apr 02 Python
pandas.dataframe中根据条件获取元素所在的位置方法(索引)
Jun 07 Python
django rest framework 数据的查找、过滤、排序的示例
Jun 25 Python
Python延时操作实现方法示例
Aug 14 Python
Django跨域请求CSRF的方法示例
Nov 11 Python
在python中画正态分布图像的实例
Jul 08 Python
从多个tfrecord文件中无限读取文件的例子
Feb 17 Python
pytorch实现Tensor变量之间的转换
Feb 17 Python
Python中的面向接口编程示例详解
Jan 17 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 实例化类的一点摘记
2008/03/23 PHP
PHP中实现获取IP和地理位置类分享
2015/02/10 PHP
JavaScript对象模型-执行模型
2008/04/28 Javascript
js 兼容多浏览器的回车和鼠标焦点事件代码(IE6/7/8,firefox,chrome)
2010/04/14 Javascript
推荐17个优美新鲜的jQuery的工具提示插件
2012/09/14 Javascript
基于jquery实现的可编辑下拉框实现代码
2014/08/02 Javascript
js+csss实现的一个带复选框的下拉框
2014/09/29 Javascript
javascript中的遍历for in 以及with的用法
2014/12/22 Javascript
JavaScript实现简单图片翻转的方法
2015/04/17 Javascript
jquery预加载图片的方法
2015/05/27 Javascript
javascript实现给定半径求出圆的面积
2015/06/26 Javascript
深入学习JavaScript中的原型prototype
2015/08/13 Javascript
javascript中substring()、substr()、slice()的区别
2015/08/30 Javascript
AngularJS 整理一些优化的小技巧
2016/08/18 Javascript
详解基于Bootstrap+angular的一个豆瓣电影app
2017/06/26 Javascript
微信小程序商品详情页的底部弹出框效果
2020/11/16 Javascript
浅谈Angular单元测试总结
2019/03/22 Javascript
微信小程序如何修改本地缓存key中单个数据的详解
2019/04/26 Javascript
使用JavaScript获取Django模板指定键值数据
2020/05/27 Javascript
Vue 解决通过this.$refs来获取DOM或者组件报错问题
2020/07/28 Javascript
JavaScript实现图片放大预览效果
2020/11/02 Javascript
javascript实现数字时钟效果
2021/02/06 Javascript
Python抓取淘宝下拉框关键词的方法
2015/07/08 Python
致Python初学者 Anaconda入门使用指南完整版
2018/04/05 Python
Django处理文件上传File Uploads的实例
2018/05/28 Python
Python调用Windows命令打印文件
2020/02/07 Python
django model通过字典更新数据实例
2020/04/01 Python
django的403/404/500错误自定义页面的配置方式
2020/05/21 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
2020/05/21 Python
python中的错误如何查看
2020/07/08 Python
节省高达65%的城市景点费用:Go City
2019/07/06 全球购物
群众路线对照检查剖析材料
2014/10/09 职场文书
工伤事故处理协议书怎么写
2014/10/15 职场文书
护士2015年终工作总结
2015/04/29 职场文书
高二英语教学反思
2016/03/03 职场文书
十大最强电系宝可梦,阿尔宙斯电系之一,第七被称为雷神
2022/03/18 日漫