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()
多条数据插入可以使用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()
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