




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 . Python与SQLite数据库应用系统-Python之SQLite数据库应用 XX(XXXX学院,班级:XX班)摘要:Python自带一个轻量级的关系型数据库SQLite。这一数据库使用SQL语言。SQLite作为后端数据库,可以制作有数据存储需求的工具。Python标准库中的sqlite3提供该数据库的接口。现在作为初学者,我将进行初步的尝试与应用。关键字:Python;SQLite;应用;数据库;编程一Python与SQLite数据库关系学习初步作为新时代的大学生学会使用网络查询相关信息非常重要,现在经过初步的网络学习以与书籍查询,现在整理如下:(一) 创建数据库注:全文学习例将以
2、一个简单的关系型数据库为实例,为一个书店存储书的分类和价格。数据库中包含两个表:category用于记录分类,book用于记录某个书的信息。一本书归属于某一个分类,因此book有一个外键(foreign key),指向catogory表的主键id。(一) 导入Python SQLITE数据库模块 Python2.5之后,置了SQLite3,成为了置模块,这给我们省了安装的功夫,只需导入即可在调用connect函数的时候,指定库名称,如果指定的数据库存在就直接打开这个数据库,如果不存在就新创建一个再打开。也可以创建数据库在存中。在使用connect()连接数据库后,我就可以通过定位指针curso
3、r,来执行SQL命令:import sqlite3# test.db is a file in the working directory.conn = sqlite3.connect(test.db)c = conn.cursor()# create tablesc.execute(CREATE TABLE category (id int primary key, sort int, name text)c.execute(CREATE TABLE book (id int primary key, sort int, name text, price real, category int
4、, FOREIGN KEY (category) REFERENCES category(id)# save the changesconn mit()# close the connection with the databaseconn.close()SQLite的数据库是一个磁盘上的文件,如上面的test.db,因此整个数据库可以方便的移动或复制。test.db一开始不存在,所以SQLite将自动创建一个新文件。利用execute()命令,我们执行了两个SQL命令,创建数据库中的两个表。创建完成后,保存并断开数据库连接。(二)插入数据上面创建了数据库和表,确立了数据库的抽象结构。下面将在
5、同一数据库中插入数据:import sqlite3conn = sqlite3.connect(test.db)c = conn.cursor()books = (1, 1, Cook Recipe, 3.12, 1), (2, 3, Python Intro, 17.5, 2), (3, 2, OS Intro, 13.6, 2), # execute INSERT c.execute(INSERT INTO category VALUES (1, 1, kitchen)# using the placeholderc.execute(INSERT INTO category VALUES
6、(?, ?, ?), (2, 2, computer)# execute multiple commandsc.executemany(INSERT INTO book VALUES (?, ?, ?, ?, ?), books)conn mit()conn.close()插入数据同样可以使用execute()来执行完整的SQL语句。SQL语句中的参数,使用?作为替代符号,并在后面的参数中给出具体值。这里不能用Python的格式化字符串,如%s,因为这一用法容易受到SQL注入攻击。我也可以用executemany()的方法来执行多次插入,增加多个记录。每个记录是表中的一个元素,如上面的book
7、s表中的元素。(三)查询在执行查询语句后,Python将返回一个循环器,包含有查询获得的多个记录。你循环读取,也可以使用sqlite3提供的fetchone()和fetchall()方法读取记录:import sqlite3conn = sqlite3.connect(test.db)c = conn.cursor()# retrieve one recordc.execute(SELECT name FROM category ORDER BY sort)print(c.fetchone()print(c.fetchone()# retrieve all records as a listc
8、.execute(SELECT * FROM book WHERE book.category=1)print(c.fetchall()# iterate through the recordsfor row in c.execute(SELECT name, price FROM book ORDER BY sort):print(row)(四)更新与删除你可以更新某个记录,或者删除记录:# By Vameiconn = sqlite3.connect(test.db)c = conn.cursor()c.execute(UPDATE book SET price=? WHERE id=?,
9、(1000, 1)c.execute(DELETE FROM book WHERE id=2)conn mit()conn.close()我们也可以直接删除整表:c.execute(DROP TABLE book)如果删除test.db,那么整个数据库会被删除。二初步尝试与应用(一) 说明;本次笔者创建数据库将以实验四中题目为基础:设计一个数据库,包含学生信息表、课程信息表和成绩信息表,请写出各个表的数据结构的SQL语句;以与将进行简单的数据录入,删除,修改和录入等操作(二) 尝试代码:import sqlite3file=sqlite3.connect(Mydatabase.db3)flag
10、=file.cursor()flag.execute(CREATE TABLE IF NOT EXISTS student(id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT,sex INTEGER,classname TEXT );)flag.execute(CREATE TABLE IF NOT EXISTS course(id INTEGER PRIMARY KEY AUTOINCREMENT,title TEXT);)flag.execute(CREATE TABLE IF NOT EXISTS xk(std_id INTEGER,crs_id
11、 INTEGER,score REAL,PRIMARY KEY(std_id,crs_id);)file mit()#2. 向学生信息表和课程信息表各增加五条记录数据,请写出增加数据的SQL语句,以“INSERT INTO”开头。import sqlite3file=sqlite3.connect(Mydatabase.db3)flag=file.cursor()for i in(1,Zhang,0,gg51),(2,Wang,0,gg51),(3,Zhao,1,gg52),(4,Li,0,gg52),(5,Fang,1,gg51): flag.execute(insert into stud
12、ent values(?,?,?,?),i) for i in(1,Python),(2,C+),(3,Java),(4,Computer),(5,Android): flag.execute(insert into course values(?,?),i)file mit()#3. 删除学生信息表和课程信息表的个别记录数据,请写出删除数据的SQL语句,以“DELETE FROM”开头。import sqlite3file=sqlite3.connect(Mydatabase.db3)flag=file.cursor()flag.execute(SELECT * FROM student W
13、HERE id=3;)print(flag.fetchone()file mit()file.close()#4. 修改学生信息表和课程信息表的个别记录数据,请写出修改数据的SQL语句,以“UPDATE”开头。import sqlite3file=sqlite3.connect(Mydatabase.db3)flag=file.cursor()flag.execute(UPDATE student SET name=Liu WHERE id=4;)flag.execute(UPDATE course SET title=C+ WHERE id=2;)print(flag.fetchone()f
14、ile mit()#5.向成绩信息表增加十条记录数据,请写出增加数据的SQL语句,以“INSERT INTO”开头。import sqlite3file=sqlite3.connect(Mydatabase.db3)flag=file.cursor()for i in(1,1,90),(1,2,80),(1,3,100),(2,1,60),(2,2,100): flag.execute(insert into xk values(?,?,?),i) for i in(2,3,90),(3,1,80),(3,2,100),(3,3,60),(4,1,76): flag.execute(inser
15、t into xk values(?,?,?),i)file mit()file.close()(三) 运行结果:参考文献:(1) 大学计算机基础(第四版)普选主编。-:清华大学,2012.9(2) 博客园,博主;:Vamei三总结sqlite3只是一个SQLite的接口。想要熟练的使用SQLite数据库,还需要学习更多的关系型数据库的知识,Phthon确实有比较强大的数据库,可以想象C+的数据库该有多么强大,期待的下学期对于C+的学习。并在这里祝福每一位奋战的同学期末取得好成绩,过一个快乐而又充实的寒假。附录一:个人感想附录二:Python.Sqlite中常见函数与举例附录三:生成数据库与对
16、应的五个程序代码(详见额外的文件夹)附录一通过本次实验探究,亦或是第一次尝试论文的书写,个人觉得还是有许多收获:一方面,需要自身在比较繁忙的学业中抽出时间,合理规划安排时间,寻找并查询相应Python,SQlite知识,以与它们的融合,并自学之; 另一方面,尽管在本次的论文中很许多的不成熟或是可以修改的地方,但是总体上,为了完成此次论文,还是需要许多格式的查询,也算是提前进行了一次论文的练习吧。附录二(一)使用游标查询数据库 cu=cx.cursor() 游标对象有以下的操作: 1.execute()-执行sql语句 2.executemany-执行多条sql语句 3.close()-关闭游标
17、 4.fetchone()-从结果中取一条记录,并将游标指向下一条记录 5.fetchmany()-从结果中取多条记录 6.fetchall()-从结果中取出所有记录 7.scroll()-游标滚动 (二)建表cu.execute(create table catalog (id integer primary key,pid integer,name varchar(10) UNIQUE,nickname text NULL)上面语句创建了一个叫catalog的表,它有一个主键id,一个pid,和一个name,name是不可以重复的,以与一个nickname默认为NULL。 插入数据 # N
18、ever do this - insecure 会导致注入攻击pid=200c.execute(. where pid = %s % pid)正确的做法如下,如果t只是单个数值,也要采用t=(n,)的形式,因为元组是不可变的。 for t in(0,10,abc,Yu),(1,20,cba,Xu): cx.execute(insert into catalog values (?,?,?,?), t)简单的插入两行数据,不过需要提醒的是,只有提交了之后,才能生效.我们使用数据库连接对象cx来进行提交commit和回滚rollback操作.cx mit()(三)查询cu.execute(sele
19、ct * from catalog) 要提取查询到的数据,使用游标的fetch函数,如:In 10: cu.fetchall()Out10: (0, 10, uabc, uYu), (1, 20, ucba, uXu)如果我们使用cu.fetchone(),则首先返回列表中的第一项,再次使用,则返回第二项,依次下去.(四)修改In 12: cu.execute(update catalog set name=Boy where id = 0)In 13: cx mit()注意,修改数据以后提交(五)删除cu.execute(delete from catalog where id = 1) c
20、x mit() (六)使用中文请先确定你的IDE或者系统默认编码是utf-8,并且在中文前加上u x=u鱼cu.execute(update catalog set name=? where id = 0,x)cu.execute(select * from catalog)cu.fetchall()(0, 10, uu9c7c, uYu), (1, 20, ucba, uXu)如果要显示出中文字体,那需要依次打印出每个字符串In 26: for item in cu.fetchall(): .: for element in item: .: print element, .: print
21、.: 0 10 鱼 Yu1 20 cba Xu(七)Row类型Row提供了基于索引和基于名字大小写敏感的方式来访问列而几乎没有存开销。 原文如下:sqlite3.Row provides both index-based and case-insensitive name-based access to columns with almost no memory overhead. It will probably be better than your own custom dictionary-based approach or even a db_row based solution. Row对象的详细介绍class sqlite3.RowA Row instance serves as a highly optimized row_factory for Connection objects. It tries to mimic a tuple in most of its features.It supports mapping access by column name and index, iteration, representation, equality testing and
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030急救轮椅车市场投资前景分析及供需格局研究研究报告
- 2025-2030录音室耳机行业市场现状供需分析及重点企业投资评估规划分析研究报告
- 2025-2030幻灯及投影设备产业行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030巧克力专用油行业发展分析及前景趋势与投资研究报告
- 2025-2030岩棉产业市场深度调研及发展趋势与投资研究报告
- 2025-2030小龙虾产业市场深度分析及前景趋势与投资研究报告
- 2025-2030家庭医疗设备行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030实木儿童家具行业市场发展分析及投资前景研究报告
- 2025-2030安全座椅项目可行性研究报告
- 2025-2030大容量流化床干燥器行业市场现状供需分析及重点企业投资评估规划分析研究报告
- (完整版)人教版小学3-6年级英语单词表-可直接打印
- 一例心肌梗塞患者的病例讨论培训课件
- GB∕T 13171.2-2022 洗衣粉 第2部分:试验方法
- 楷书(课件)课件
- 园林绿化工程监理实施细则(完整版)
- 工程监理部人员分工与职责
- 课程设计 CA6140拨叉说明书
- 成语故事杞人忧天PPT教案
- 部编版三年级上册音乐知识点汇总
- 生命体征的测量PPT幻灯片课件
- 吉林省吉林市高考报名登记表
评论
0/150
提交评论