什么是 sqlalchemy?
sqlalchemy
是 Python
的一个优秀的开源 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.db
在 SQLitebrowser
中的视图:
网络异常,图片无法展示
|
网络异常,图片无法展示
|
数据创建 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…
以上就是今天的全部内容了,感谢您的阅读,我们下节再会。