网络编程
位置:首页>> 网络编程>> Python编程>> 以SQLite和PySqlite为例来学习Python DB API

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

作者:mdxy-dxy  发布时间:2023-07-13 02:19:14 

标签:SQLite,PySqlite


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',
 );
 """)

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

来源:https://www.cnblogs.com/fortwo/archive/2013/04/22/3035691.html

0
投稿

猜你喜欢

  • [前言:]ASP.NET是微软提供的最新的开发基于Web的应用程序的技术。它提供了大量的比传统ASP脚本技术的好处,包括:1)通过把UI表现
  • 本文列举了兼容 IE 和 FF 的换行 CSS 推荐样式,详细介绍了word-wrap同word-break的区别。兼容 IE 和 FF 的
  • 1.若有疑问立即检测 在出错时若能对原始代码做简单检测可以省去很多头痛问题。W3C对于XHTML与CSS 都有检测工具可用,请见 http:
  • 在照着Tensorflow官网的demo敲了一遍分类器项目的代码后,运行倒是成功了,结果也不错。但是最终还是要训练自己的数据,所以尝试准备加
  • 如何要恢复Master数据库呢?方法1:重装SQL,但是数据就Over掉了方法2:重建Master Rebuildm.exe 用到SQL的安
  • 使用cookie来判断来访者身份,是否是首次登陆, asp代码实例如下:< %@ LANGUAGE=&q
  • 以前大家谈了很多有关打开数据库连接安全的问题,现在我再提出一种思路:使用activex dll来保护你的代码。(既可以不用为使用共享的加密软
  • SQL中的单记录函数 1.ASCII 返回与指定的字符对应的十进制数; SQL> select ascii('A')
  • 只能是一些限定的东西运行代码框ENTER键可以让光标移到下一个输入框 <input onkeydown="if(event.
  • 本文实例为大家分享了PyQt5实现暗黑风格的计时器的具体代码,供大家参考,具体内容如下主要是学习多线程知识,使用的是QTime(),但是似乎
  • 学习一些你已经知道的知识也没有什么坏处,是吧?我知道这可能并不一定非常有意义,但是很多时候我们往往知其然而不知其所以然,这会使得事情出现惊人
  • 索引是以表列为基础的数据库对象。索引中保存着表中排序的索引列,并且纪录了索引列在数据库表中的物理存储位置,实现了表中数据的逻辑排序。通过索引
  • 原来字母还可以组合成各种动物图案,真是佩服设计师的奇思妙想,很可爱,超级有趣的组合!Bembo's Zoo 猴子:羊是牛吗,勤劳的水
  • BCP语句的作用:BCP是SQL提供的进行数据传输的实用程序,这种语句提供了非常快的数据导入的方法。(当然7。0也有BCP的替代方法就是DT
  • 一、DAFONT  英文字体很多,分类很详细,字体多数都是免费,唯一的缺点中文字体少了些.http://www.dafont.co
  • php操作xml最近计划写个人的小网站,一系列原因选择了用php来写,最大的问题就是虽然php很流行,但我从来没有接触过php,看了一个多星
  • iconv函数库能够完成各种字符集间的转换,是php编程中不可缺少的基础函数库。 1、下载libiconv函数库http://ftp.gnu
  • 上期回顾:亚马逊购物用户体验分析 (一)“查找内部”功能书是在亚马逊最常被购买的产品之一,所以毋庸置疑亚马逊的开发小组已经建立了一个关于“查
  • 如果你能很好的理解我下面的一句话,那这些都不是问题了。asp是服务器端语言,它的作用是动态生成客户端浏览器所能识别的html css jav
  • 以下是我做美工的两年生活中一条条总结出来的经验,每一点都是我常用的,虽然不是什么大学问,但我觉得要互相学习才能提高,所以现在拿出来和大家一起
手机版 网络编程 asp之家 www.aspxhome.com