当前位置:   article > 正文

Python数据库操作【一】—— Sqlite_python sqlite

python sqlite

Sqlite简介

以下摘自百度百科

       SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至2021年已经接近有21个年头,SQLite也迎来了一个版本 SQLite 3已经发布。

python中内置Sqlite3,故无需安装第三方库,直接使用即可。

本文代码已上传至GitHub,项目地址如下:

https://github.com/XMNHCAS/SqlitePythonDemo

建库建表

在测试文件夹中创建CreateDatabase.py,导入sqlite3,然后创建一个sqlite数据库,并创建一张User表。

  1. import sqlite3
  2. # 若无该数据库,则创建Sqlite数据库并打开
  3. # 若有,则直接打开数据库
  4. conn = sqlite3.connect('test.db')
  5. # 获取该数据库的游标
  6. cursor = conn.cursor()
  7. # 执行一条SQL语句,创建user表:
  8. cursor.execute('CREATE TABLE User (ID INTEGER Primary KEY, Name TEXT, Age INTEGER)')
  9. # 关闭Cursor:
  10. cursor.close()
  11. # 提交事务:
  12. conn.commit()
  13. # 关闭Connection:
  14. conn.close()
'
运行

运行后则会在create.py所在的目录下生成一个test.db的文件,该文件即为sqlite数据库文件,若需要连接其他位置的sqlite数据库,则在connect 填入对应的数据库文件路径即可。

使用navicat打开test.db,可以看到我们已经成功创建User表。


增删改查(CRUD)

新增记录(Create)

直接使用游标执行insert语句,可以获取到影响的行数。

  1. import sqlite3
  2. # 打开数据库
  3. conn = sqlite3.connect('test.db')
  4. # 获取该数据库的游标
  5. cursor = conn.cursor()
  6. # 执行单条数据插入,并返回操作行数
  7. singleInsert = cursor.execute("INSERT INTO User (Name, Age) VALUES ('张三', 18)")
  8. print(f"插入了{singleInsert.rowcount}条数据")
  9. # 执行批量插入,并返回操作行数
  10. sql = "INSERT INTO User (Name, Age) VALUES (?, ?)"
  11. batchInsert = cursor.executemany(sql, [('李四', 19), ('王五', 22)])
  12. print(f"批量插入了{batchInsert.rowcount}条数据")
  13. # 关闭Cursor:
  14. cursor.close()
  15. # 提交事务:
  16. conn.commit()
  17. # 关闭Connection:
  18. conn.close()
'
运行

运行结果:

使用navicat查询可以看到数据已经成功插入:

检索记录(Retrieve)

检索记录分三种模式,第一种是直接获取全部数据,第二种是获取前N条数据,第三种是移动游标,一条一条地获取数据。

  1. import sqlite3
  2. # 打开数据库
  3. conn = sqlite3.connect('test.db')
  4. # 获取该数据库的游标
  5. cursor = conn.cursor()
  6. # 获取全部记录
  7. cursor.execute("SELECT * FROM User")
  8. allData = cursor.fetchall()
  9. print("直接获取全部记录:")
  10. for item in allData:
  11. print(item)
  12. # 获取前N条记录
  13. cursor.execute("SELECT * FROM User")
  14. manyData = cursor.fetchmany(2)
  15. print("获取部分结果:")
  16. for item in manyData:
  17. print(item)
  18. # 一次读取一条结果,循环获取所有记录
  19. cursor.execute("SELECT * FROM User")
  20. print("一次读取一条结果,循环获取所有记录:")
  21. while True:
  22. singleData = cursor.fetchone()
  23. if singleData is None:
  24. break
  25. print(singleData)
  26. # 关闭Cursor:
  27. cursor.close()
  28. # 提交事务:
  29. conn.commit()
  30. # 关闭Connection:
  31. conn.close()

运行结果如下:

更新记录(Update)

可以仅修改单条记录,也可以修改多条记录。

  1. import sqlite3
  2. # 打开数据库
  3. conn = sqlite3.connect('test.db')
  4. # 获取该数据库的游标
  5. cursor = conn.cursor()
  6. cursor.execute("SELECT * FROM User")
  7. print("修改前的数据:")
  8. print(cursor.fetchall())
  9. # 执行单条数据修改,并返回操作行数
  10. singleUpdate = cursor.execute("UPDATE User SET Age = 20 WHERE Name = '张三'")
  11. print(f"修改了{singleUpdate.rowcount}条数据")
  12. cursor.execute("SELECT * FROM User")
  13. print("修改单条数据后的数据:")
  14. print(cursor.fetchall())
  15. # 执行批量修改,并返回操作行数
  16. sql = "UPDATE User SET Age = ? WHERE Name = ?"
  17. batchUpdate = cursor.executemany(sql, [(25, '李四'), (35, '王五')])
  18. print(f"批量修改了{batchUpdate.rowcount}条数据")
  19. cursor.execute("SELECT * FROM User")
  20. print("批量修改后的的数据:")
  21. print(cursor.fetchall())
  22. # 关闭Cursor:
  23. cursor.close()
  24. # 提交事务:
  25. conn.commit()
  26. # 关闭Connection:
  27. conn.close()

运行结果如下:

删除数据(Delete)

同样支持删除单条数据或者批量删除数据。

  1. import sqlite3
  2. # 打开数据库
  3. conn = sqlite3.connect('test.db')
  4. # 获取该数据库的游标
  5. cursor = conn.cursor()
  6. cursor.execute("SELECT * FROM User")
  7. print("删除前的数据:")
  8. print(cursor.fetchall())
  9. # 执行单条数据修改,并返回操作行数
  10. singleDelete = cursor.execute("DELETE FROM User WHERE ID = 1")
  11. print(f"删除了{singleDelete.rowcount}条数据")
  12. cursor.execute("SELECT * FROM User")
  13. print("删除单条数据后的数据:")
  14. print(cursor.fetchall())
  15. # 执行批量删除,并返回操作行数
  16. sql = "DELETE FROM User WHERE ID = ?"
  17. batchDelete = cursor.executemany(sql, [('2'), ('3')])
  18. print(f"批量删除了{batchDelete.rowcount}条数据")
  19. cursor.execute("SELECT * FROM User")
  20. print("批量删除后的的数据:")
  21. print(cursor.fetchall())
  22. # 关闭Cursor:
  23. cursor.close()
  24. # 提交事务:
  25. conn.commit()
  26. # 关闭Connection:
  27. conn.close()

运行结果如下:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/891521
推荐阅读
相关标签
  

闽ICP备14008679号