肾么?你还不会sqlalchemy!【SQLite】

简介: 肾么?你还不会sqlalchemy!【SQLite】

什么是 sqlalchemy?


sqlalchemyPython 的一个优秀的开源 ORM 框架。为开发者提供了方便快捷的 API,能够提高开发效率,让开发者专心于业务代码开发,而非浪费时间在数据库的维护上。今天我们就来一起了解下 sqlalchemy 的基本用法。


什么是 SQLite?


SQLite 是一款超轻的关系型数据库,其实际就是一个 .db 文件,通常我们在测试环境中可以方便快捷的使用它,另部分企业也将其用在生产环境中。总之他是一款优秀的数据库。


安装


安装 sqlalchemy


pip install sqlalchemy
复制代码


安装 SQLitebrowser


下载地址:http://www.sqlitebrowser.org/dl/
复制代码


网络异常,图片无法展示
|



选择合适自己的下载即可。


网络异常,图片无法展示
|


例子


创建数据库&表


from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Boolean,Column,Integer,String
# 定义数据库路径(不存在会自动创建)
SQLiteURL = 'sqlite:///test.db'
# 创建engine,即数据库驱动信息
engine = create_engine(
    url=SQLiteURL,
    echo=True,    # 打开sqlalchemy ORM过程中的详细信息
    connect_args={
        'check_same_thread':False   # 是否多线程
    }
)
# 数据表的基类(定义表结构用)
Base = declarative_base()
# 定义User表结构
class User(Base):
    # User类对象对应表users
    __tablename__='users'
    my_id = Column(Integer,primary_key=True,index=True)
    name = Column(String(32),unique=True,index=True)
    passwd = Column(String(32),index=True)
    is_active = Column(Boolean,default=True)
# 创建表
# checkfirst=True 默认也是 True,即如果数据库存在则不再创建
Base.metadata.create_all(engine, checkfirst=True)
复制代码


执行以上代码:


PS C:\Users\xx\Desktop\study\02> python .\orm.py
2021-07-12 17:23:06,010 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2021-07-12 17:23:06,010 INFO sqlalchemy.engine.Engine PRAGMA main.table_info("users")
2021-07-12 17:23:06,011 INFO sqlalchemy.engine.Engine [raw sql] ()
2021-07-12 17:23:06,011 INFO sqlalchemy.engine.Engine PRAGMA temp.table_info("users")
2021-07-12 17:23:06,011 INFO sqlalchemy.engine.Engine [raw sql] ()
2021-07-12 17:23:06,012 INFO sqlalchemy.engine.Engine
CREATE TABLE users (
        my_id INTEGER NOT NULL,
        name VARCHAR(32),
        passwd VARCHAR(32),
        is_active BOOLEAN,
        PRIMARY KEY (my_id)
)
2021-07-12 17:23:06,012 INFO sqlalchemy.engine.Engine [no key 0.00047s] ()
2021-07-12 17:23:06,026 INFO sqlalchemy.engine.Engine CREATE INDEX ix_users_my_id ON users (my_id)
2021-07-12 17:23:06,027 INFO sqlalchemy.engine.Engine [no key 0.00029s] ()
2021-07-12 17:23:06,030 INFO sqlalchemy.engine.Engine CREATE INDEX ix_users_passwd ON users (passwd)
2021-07-12 17:23:06,030 INFO sqlalchemy.engine.Engine [no key 0.00025s] ()
2021-07-12 17:23:06,033 INFO sqlalchemy.engine.Engine CREATE UNIQUE INDEX ix_users_name ON users (name)
2021-07-12 17:23:06,034 INFO sqlalchemy.engine.Engine [no key 0.00040s] ()
2021-07-12 17:23:06,037 INFO sqlalchemy.engine.Engine COMMIT
PS C:\Users\xx\Desktop\study\02>
复制代码


代码所在路径下生成了 test.db


网络异常,图片无法展示
|


test.dbSQLitebrowser 中的视图:


网络异常,图片无法展示
|


网络异常,图片无法展示
|


数据创建 Add


# 创建session类对象(建立和数据库的链接)
SessionLocal = sessionmaker(
    bind=engine,
    autoflush=False,
    autocommit=False
)
# 创建session实例(实例化)
db = SessionLocal()
# 创建新的User类实例
phyger = User(
    my_id = 1,
    name = 'phyger',
    passwd = 'pwd@123'
)
# 将phyger实例插入users表中
db.add(phyger)
# 提交后才算正式插入数据
db.commit()
# 关闭数据库连接
db.close()
复制代码


执行代码后去 SQLitebrowser 中查看:


网络异常,图片无法展示
|


数据查询 Query


# 创建session类对象(建立和数据库的链接)
SessionLocal = sessionmaker(
    bind=engine,
    autoflush=False,
    autocommit=False
)
# 创建session实例(实例化)
db = SessionLocal()
# 查询数据
res = db.query(User).all()
print(res)
# 条件查询
user1 = db.query(User).filter_by(my_id=1).first()
print(user1)
# 关闭数据库连接
db.close()
复制代码


代码执行结果:


网络异常,图片无法展示
|


你会发现,日志中打印了实际执行的 SQL 语句,也将查询到的信息展示了出来。更多过滤条件可查看官方文档。


数据更新


# 创建session类对象(建立和数据库的链接)
SessionLocal = sessionmaker(
    bind=engine,
    autoflush=False,
    autocommit=False
)
# 创建session实例(实例化)
db = SessionLocal()
# 更新数据
user1.name = 'flyGg'
db.commit()
# 更新后查询
user2 = db.query(User).filter_by(my_id=1).first()
print(user2.name)
# 关闭数据库连接
db.close()
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|


数据删除 Delete


为方便演示,我们又添加了一条信息 phyger2


网络异常,图片无法展示
|


# 创建session类对象(建立和数据库的链接)
SessionLocal = sessionmaker(
    bind=engine,
    autoflush=False,
    autocommit=False
)
# 创建session实例(实例化)
db = SessionLocal()
# 删除数据
user3 = db.query(User).filter_by(my_id=1).first()
db.delete(user3)
db.commit()
# 关闭数据库连接
db.close()
复制代码


网络异常,图片无法展示
|


参考:www.cnblogs.com/lsdb/p/9835…


以上就是今天的全部内容了,感谢您的阅读,我们下节再会。

相关文章
|
11天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
79 15
|
1月前
|
存储 SQL 数据库
数据库知识:了解SQLite或其他移动端数据库的使用
【10月更文挑战第22天】本文介绍了SQLite在移动应用开发中的应用,包括其优势、如何在Android中集成SQLite、基本的数据库操作(增删改查)、并发访问和事务处理等。通过示例代码,帮助开发者更好地理解和使用SQLite。此外,还提到了其他移动端数据库的选择。
43 8
|
2月前
|
Web App开发 SQL 数据库
使用 Python 解析火狐浏览器的 SQLite3 数据库
本文介绍如何使用 Python 解析火狐浏览器的 SQLite3 数据库,包括书签、历史记录和下载记录等。通过安装 Python 和 SQLite3,定位火狐数据库文件路径,编写 Python 脚本连接数据库并执行 SQL 查询,最终输出最近访问的网站历史记录。
42 4
|
2月前
|
存储 关系型数据库 数据库
轻量级数据库的利器:Python 及其内置 SQLite 简介
轻量级数据库的利器:Python 及其内置 SQLite 简介
69 3
|
2月前
|
应用服务中间件 PHP Apache
PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
|
3月前
|
存储 API 数据库
QML使用Sqlite数据库存储ListModel数据
本文介绍了在QML中使用Sqlite数据库存储ListModel数据的方法,包括如何创建数据库、读取数据、动态添加和删除数据,以及如何在程序启动和退出时与数据库同步数据。
|
3月前
|
数据库 数据库管理
qt对sqlite数据库多线程的操作
本文总结了在Qt中进行SQLite数据库多线程操作时应注意的四个关键问题,包括数据库驱动加载、加锁、数据库的打开与关闭,以及QsqlQuery变量的使用。
218 1
|
2月前
|
存储 缓存 关系型数据库
sqlite 数据库 介绍
sqlite 数据库 介绍
49 0
|
4月前
|
人工智能 小程序 Java
【工具】轻松解锁SQLite数据库,一窥微信聊天记录小秘密
本文介绍了一款名为PyWxDump的开源工具,它可以获取微信账户信息、解密SQLite数据库以查看和备份聊天记录。此工具适用于已登录电脑版微信的用户,通过GitHub下载后简单几步即可操作。适合对数据恢复感兴趣的开发者,但请注意合法合规使用并尊重隐私。
602 2
【工具】轻松解锁SQLite数据库,一窥微信聊天记录小秘密
|
4月前
|
关系型数据库 Java MySQL
C#winform中使用SQLite数据库
C#winform中使用SQLite数据库
209 3
C#winform中使用SQLite数据库