python使用sqlite3模块操作SQLite

  • 2021-11-24 17:10:54
  • 开发
  • 877
  • shevechco

SQLite是一种轻量级的关系型数据库,它无需单独安装数据库服务器,所有数据存储在一个单独的文件中,适用于小型应用、移动开发、数据分析等场景。Python 提供了内置的sqlite3模块,方便我们操作SQLite数据库。
今天我们就来学习下python操作sqlite3,sqlite3是2021年推出的最新版本。
sqlite3是python内置模块,无需安装,我们可以直接导入进行使用。

import sqlite3

conn = sqlite3.connect("mannager.db")
if conn:
    print("Connect succ !")
else:
    print("Connect failed !")

我们直接使用connect方法连接sqlite数据库,没有的话会自动创建,创建好以后我们需要创建游标来操作数据库

cursor = conn.cursor()

接着我们就可以使用execute方法来执行SQL语句。
例如我们创建一个表和结构

SQL = '''
CREATE TABLE IF NOT EXISTS [user](
[id] INTEGER PRIMARY KEY AUTOINCREMENT,
[name] TEXT NOT NULL,
[account] TEXT NOT NULL,
[password] TEXT NOT NULL,
[level] INTEGER NOT NULL DEFAULT 2
)
'''
cursor.execute(SQL)
conn.commit()
cursor.close()
conn.close()

SQLite支持事务管理,我们在做增删改的动作之后都需要进行commit操作,数据才会真正提交写入数据库,在做增删改的动作失败的时候我们可以使用rollback进行回滚事务,这样就会回到上一次commit的状态,这样做的好处就是防止写入错误的数据影响数据库里的数据,下面就简单些一个例子

try:
    cursor.execute(SQL)
    raise "抛出一个错误测试"
    conn.commit()
except Exception as e:
    conn.rollback()
    print("数据执行错误, {}".format(e))
finally:
    cursor.close()
    conn.close()

在上述的数据表创建好以后我们就操作下增删改查相关操作。
1.插入数据
1).单条数据插入

SQL = "INSERT INTO `user` (`name`, `account`, `password`, `level`) VALUES (?, ?, ?, ?)"
cursor.execute(SQL, ("sulao", "shevechco", "admin123", 1))
conn.commit()

插入数据的时候我们需要使用"?"作为占位符,这样做的好处是可以防止SQL注入。
2).多条数据插入

users = [
    ("sulao2", "shevechco2", "admin123", 1),
    ("admin", "admin", "admin123", 1),
    ("suyang", "suyang", "admin123", 2)
]
SQL = "INSERT INTO `user` (`name`, `account`, `password`, `level`) VALUES (?, ?, ?, ?)"
try:
    cursor.executemany(SQL, users)
    conn.commit()
except Exception as e:
    conn.rollback()
    print("数据操作错误, {}".format(e))
finally:
    cursor.close()
    conn.close()

202504071258318393141909.png

多条数据插入可以使用executemany方法
2.修改数据

SQL = "UPDATE `user` SET `level`=? WHERE `name`=?"
try:
    cursor.execute(SQL, (2, "sulao2"))
    conn.commit()
    print("数据操作成功!")
except Exception as e:
    conn.rollback()
    print("数据操作错误, {}".format(e))
finally:
    cursor.close()
    conn.close()

202504071258459475764560.png

3.删除数据

SQL = "DELETE FROM `user` WHERE `name`=?"
try:
    cursor.execute(SQL, ("sulao2",))
    conn.commit()
    print("数据删除成功!")
except Exception as e:
    conn.rollback()
    print("数据删除错误, {}".format(e))
finally:
    cursor.close()
    conn.close()

在做删除数据的时候一定要传入条件,避免不小心删除所有数据。
4.查找数据
1).fetchall返回所有数据

SQL = "SELECT * FROM `user` WHERE `level`=?"
cursor.execute(SQL, (1,))
rows = cursor.fetchall()
print(rows)
#打印
[(1, 'sulao', 'shevechco', 'admin123', 1), (3, 'admin', 'admin', 'admin123', 1)]

2).fetchone返回单条数据

SQL = "SELECT * FROM `user` WHERE `level`=?"
cursor.execute(SQL, (2,))
rows = cursor.fetchone()
print(rows)
#打印
(4, 'suyang', 'suyang', 'admin123', 2)

5.其他
1).使用Row将查询结果映射为字典形式

conn.row_factory = sqlite3.Row
cursor = conn.cursor()
SQL = "SELECT * FROM `user` WHERE `level`=?"
cursor.execute(SQL, (2,))
rows = cursor.fetchone()
print(rows["name"], rows["account"], rows["level"])
cursor.close()
conn.close()
#打印
suyang suyang 2

2).使用with管理数据库自动打开和关闭

with sqlite3.connect("mannager.db") as conn:
    cursor = conn.cursor()
    SQL = "SELECT * FROM `user` WHERE `level`=?"
    cursor.execute(SQL, (1,))
    print(cursor.fetchall())
#打印
[(1, 'sulao', 'shevechco', 'admin123', 1), (3, 'admin', 'admin', 'admin123', 1)]

使用with管理时,自动commit()提交事务,异常发生时自动rollback()回滚事务,退出时自动关闭conn连接

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.sulao.cn/post/801

相关推荐