Python操作SQLite数据库

简介: 连接数据库从2.5版本开始,Python的标准库中就有了一个专门用于SQLite的sqlite3模块。连接SQLite数据库方式如下:import sqlite3 as dbapicon = dbapi.connect('population.db')cur = con.cursor()第一个语句用于引用数据库API; 第二个语句创建了一个到数据库的连接

连接数据库

从2.5版本开始,Python的标准库中就有了一个专门用于SQLite的sqlite3模块。连接SQLite数据库方式如下:

import sqlite3 as dbapi
con = dbapi.connect('population.db')
cur = con.cursor()

第一个语句用于引用数据库API;
第二个语句创建了一个到数据库的连接(connection):调用数据库模块的connect方法。该方法的参数是一个字符串,它定义了我们所要连接的那个数据库。由于SQLite是将整个数据库保存在磁盘上的某个文件中的,因此这里就是该文件的路径。如果该数据库不存在,就会直接创建出来;
第三个语句用于获取一个游标,它类似于文本编辑器中的光标,用于记录我们当前在数据库中的位置;当多个程序同时访问数据库时,该数据库可以知道谁在干什么。

数据类型对比

SQLite Python 说明
NULL NontType 啥也不知道
INTEGER int或long 整数
REAL float 8字节浮点数
TEXT unicode或str 字符串
BLOB buffer 二进制数据(Binary Large OBject)

操作数据库

现在我们就可以操作数据库了,我们将要执行的SQL语句放到一个字符串中,并告诉数据库去执行这个字符串,如下所示:

cur.execute('CREATE TABLE Student(Stuid TEXT, Age INTERGER, Name TEXT)')
cur.execute('INSERT INTO Student VALUES("00001", 20, "Lucy")')
cur.execute('INSERT INTO Student VALUES("00002", 21, "Lily")')

在将数据库插入到数据库或对数据库做了任何其他修改之后,我们必须通过连接的commit方法提交(commit)这些修改:

con.commit()

现在我们可以用如下方式来获取数据:

cur.execute('SELECT * FROM Student')
print(cur.fetchone())
print(cur.fetchall())

fetchone方法以元组的形式返回每条记录,其中各元素按查询所指定的顺序排列。如果不再有其他记录存在,则返回None。默认情况下,数据库中的TEXT是以Unicode字符串的形式返回的,我们可以告诉sqlite3以str的类型返回字符串:将连接的text_factory成员设置为类型str。

con.text_factory = str

fetchall方法的功能是以元组列表的形式返回查询所产生的全部数据。

一种较为快捷的插入方式:

ss = [("00003", 20, "David"), ("00004", 23, "Cneagle"),
      ("00005", 22, "qxzy")]
for s in ss:
    cur.execute('INSERT INTO Student VALUES(?, ?, ?)', (s[0], s[1], s[2]))
con.commit()

这次execute的调用用到了两个参数,第一个是带有问号的SQL语句,这些问号是将要插入的值的占位符,第二个是由待插入值所组成的元组,数据库在执行该语句时,会用这些值从左到右地替换那些问号。

注意:

  • SQL的数据类型与编程语言中的数据类型并不完全相同,因此在编写应用程序的时候很有必要在它们之间进行类型转换。
  • 在被提交之前,对数据库做出的修改不会有任何效果。这保证了当数据库被两个以上的程序同时操作时,能够保持一致的状态。
目录
相关文章
|
25天前
|
缓存 NoSQL 关系型数据库
在Python Web开发过程中:数据库与缓存,MySQL和NoSQL数据库的主要差异是什么?
MySQL是关系型DB,依赖预定义的表格结构,适合结构化数据和复杂查询,但扩展性有限。NoSQL提供灵活的非结构化数据存储(如JSON),无统一查询语言,但能横向扩展,适用于大规模、高并发场景。选择取决于应用需求和扩展策略。
114 1
|
1月前
|
数据格式 Python
如何使用Python的Pandas库进行数据透视图(melt/cast)操作?
Pandas的`melt()`和`pivot()`函数用于数据透视。基本步骤:导入pandas,创建DataFrame,然后使用这两个函数转换数据格式。示例代码展示了如何通过`melt()`转为长格式,再用`pivot()`恢复为宽格式。输入数据是包含'Name'和'Age'列的DataFrame,最终结果经过转换后呈现出不同的布局。
39 6
|
1月前
|
XML 关系型数据库 MySQL
python将word(doc或docx)的内容导入mysql数据库
用python先把doc文件转换成docx文件(这一步也可以不要后续会说明),然后读取docx的文件并另存为htm格式的文件(上一步可以直接把doc文件另存为htm),python根据bs4获取p标签里的内容,如果段落中有图片则保存图片。(图片在word文档中的位置可以很好的还原到生成的数据库内容) 我见网上有把docx压缩后解压获取图片的,然后根据在根据xml来读取图片的位置,我觉得比较繁琐。用docx模块读取段落的时候还需要是不是判断段落中有分页等,然而转成htm之后就不用判断那么多直接判断段落里的样式或者图片等就可以了。
22 1
|
1月前
|
Unix Shell Linux
赞!优雅的Python多环境管理神器!易上手易操作!
赞!优雅的Python多环境管理神器!易上手易操作!
|
15天前
|
人工智能 机器人 C++
【C++/Python】Windows用Swig实现C++调用Python(史上最简单详细,80岁看了都会操作)
【C++/Python】Windows用Swig实现C++调用Python(史上最简单详细,80岁看了都会操作)
|
3天前
|
NoSQL MongoDB Redis
Python与NoSQL数据库(MongoDB、Redis等)面试问答
【4月更文挑战第16天】本文探讨了Python与NoSQL数据库(如MongoDB、Redis)在面试中的常见问题,包括连接与操作数据库、错误处理、高级特性和缓存策略。重点介绍了使用`pymongo`和`redis`库进行CRUD操作、异常捕获以及数据一致性管理。通过理解这些问题、易错点及避免策略,并结合代码示例,开发者能在面试中展现其技术实力和实践经验。
23 8
Python与NoSQL数据库(MongoDB、Redis等)面试问答
|
3天前
|
SQL 关系型数据库 MySQL
Python与MySQL数据库交互:面试实战
【4月更文挑战第16天】本文介绍了Python与MySQL交互的面试重点,包括使用`mysql-connector-python`或`pymysql`连接数据库、执行SQL查询、异常处理、防止SQL注入、事务管理和ORM框架。易错点包括忘记关闭连接、忽视异常处理、硬编码SQL、忽略事务及过度依赖低效查询。通过理解这些问题和提供策略,可提升面试表现。
23 6
|
4天前
|
索引 Python
如何使用Python的Pandas库进行数据透视表(pivot table)操作?
使用Pandas在Python中创建数据透视表的步骤包括:安装Pandas库,导入它,创建或读取数据(如DataFrame),使用`pd.pivot_table()`指定数据框、行索引、列索引和值,计算聚合函数(如平均分),并可打印或保存结果到文件。这允许对数据进行高效汇总和分析。
9 2
|
9天前
|
SQL 关系型数据库 数据库
Python中SQLite数据库操作详解:利用sqlite3模块
【4月更文挑战第13天】在Python编程中,SQLite数据库是一个轻量级的关系型数据库管理系统,它包含在一个单一的文件内,不需要一个单独的服务器进程或操作系统级别的配置。由于其简单易用和高效性,SQLite经常作为应用程序的本地数据库解决方案。Python的内置sqlite3模块提供了与SQLite数据库交互的接口,使得在Python中操作SQLite数据库变得非常容易。
|
10天前
|
数据采集 JSON 网络协议
「Python系列」Python urllib库(操作网页URL对网页的内容进行抓取处理)
`urllib` 是 Python 的一个标准库,用于打开和读取 URLs。它提供了一组模块,允许你以编程方式从网络获取数据,如网页内容、文件等。
32 0