前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >sqlalchemy你必须得会

sqlalchemy你必须得会

作者头像
Python研究所
发布2022-06-17 08:24:25
6130
发布2022-06-17 08:24:25
举报
文章被收录于专栏:大飞的部落阁大飞的部落阁

什么是 sqlalchemy?

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

什么是 SQLite?

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

安装

安装 sqlalchemy

代码语言:javascript
复制
pip install sqlalchemy

安装 SQLitebrowser

代码语言:javascript
复制
下载地址:http://www.sqlitebrowser.org/dl/
下载页面
下载页面

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

SQLitebrowser界面
SQLitebrowser界面

例子

创建数据库&表

代码语言:javascript
复制
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)

执行以上代码:

代码语言:javascript
复制
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

代码语言:javascript
复制
# 创建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

代码语言:javascript
复制
# 创建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 语句,也将查询到的信息展示了出来。更多过滤条件可查看官方文档。

数据更新

代码语言:javascript
复制
# 创建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()
代码执行的结果
代码执行的结果
SQLitebrowser中的效果
SQLitebrowser中的效果

数据删除 Delete

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

2条数据
2条数据
代码语言:javascript
复制
# 创建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()
删除后SQLitebrowser的结果
删除后SQLitebrowser的结果

参考:https://www.cnblogs.com/lsdb/p/9835894.html

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是 sqlalchemy?
  • 什么是 SQLite?
  • 安装
    • 安装 sqlalchemy
      • 安装 SQLitebrowser
      • 例子
        • 创建数据库&表
          • 数据创建 Add
            • 数据查询 Query
              • 数据更新
                • 数据删除 Delete
                相关产品与服务
                数据库
                云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档