什么是 sqlalchemy?
sqlalchemy
是 Python
的一个优秀的开源 ORM
框架。为开发者提供了方便快捷的 API
,能够提高开发效率,让开发者专心于业务代码开发,而非浪费时间在数据库的维护上。今天我们就来一起了解下 sqlalchemy
的基本用法。
什么是 SQLite?
SQLite
是一款超轻的关系型数据库,其实际就是一个 .db
文件,通常我们在测试环境中可以方便快捷的使用它,另部分企业也将其用在生产环境中。总之他是一款优秀的数据库。
安装
安装 sqlalchemy
代码语言:javascript复制pip install sqlalchemy
安装 SQLitebrowser
代码语言:javascript复制下载地址:http://www.sqlitebrowser.org/dl/
选择合适自己的下载即可。
例子
创建数据库&表
代码语言: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:UsersxxDesktopstudy 2> 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:UsersxxDesktopstudy 2>
代码所在路径下生成了 test.db
:
test.db
在 SQLitebrowser
中的视图:
数据创建 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()
数据删除 Delete
代码语言:javascript复制为方便演示,我们又添加了一条信息
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()
参考:https://www.cnblogs.com/lsdb/p/9835894.html
以上就是今天的全部内容了,感谢您的阅读,我们下节再会。