SQLAlchemy 通过 query 来对数据进行查询,可以通过 filter 方法对查询结果进行筛选。
user = session.query(User).filter(User.id<2).all() print(user) user = session.query(User).filter(User.id<=5).all() print(user)
以上代码通过 query 获取数据库中所有 User 数据,然后通过 filter 方法筛选出 id 小于 2 和 id 小于等于 5 的数据。
数据库的修改可以通过 merge 和 update 来实现
user1.name = 'admin' session.merge(user1) user4 = User(name='fred', fullname='Fred Flintstone', nickname='freddy') session.merge(user4) session.query(User).filter(User.id==2).update({'name':'test'}) user = session.query(User).filter(User.id<=5).all() print(user)
使用 merge 修改数据,当数据中存在该数据时修改,不存在是将当前数据插入数据库中。
代码运行结果
以上示例代码的运行结果如下
2019-02-16 21:45:23,919 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1 2019-02-16 21:45:23,919 INFO sqlalchemy.engine.base.Engine () 2019-02-16 21:45:23,919 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS VARCHAR(60)) AS anon_1 2019-02-16 21:45:23,919 INFO sqlalchemy.engine.base.Engine () 2019-02-16 21:45:23,920 INFO sqlalchemy.engine.base.Engine PRAGMA table_info("users") 2019-02-16 21:45:23,920 INFO sqlalchemy.engine.base.Engine () 2019-02-16 21:45:23,921 INFO sqlalchemy.engine.base.Engine CREATE TABLE users ( id INTEGER NOT NULL, name VARCHAR, fullname VARCHAR, nickname VARCHAR, PRIMARY KEY (id) ) 2019-02-16 21:45:23,921 INFO sqlalchemy.engine.base.Engine () 2019-02-16 21:45:23,922 INFO sqlalchemy.engine.base.Engine COMMIT 2019-02-16 21:45:23,924 INFO sqlalchemy.engine.base.Engine BEGIN (implicit) 2019-02-16 21:45:23,925 INFO sqlalchemy.engine.base.Engine INSERT INTO users (name, fullname, nickname) VALUES (?, ?, ?) 2019-02-16 21:45:23,925 INFO sqlalchemy.engine.base.Engine ('ed', 'Ed Jones', 'edsnickname') 2019-02-16 21:45:23,926 INFO sqlalchemy.engine.base.Engine INSERT INTO users (name, fullname, nickname) VALUES (?, ?, ?) 2019-02-16 21:45:23,926 INFO sqlalchemy.engine.base.Engine ('wendy', 'Wendy Williams', 'windy') 2019-02-16 21:45:23,926 INFO sqlalchemy.engine.base.Engine INSERT INTO users (name, fullname, nickname) VALUES (?, ?, ?) 2019-02-16 21:45:23,926 INFO sqlalchemy.engine.base.Engine ('mary', 'Mary Contrary', 'mary') 2019-02-16 21:45:23,927 INFO sqlalchemy.engine.base.Engine COMMIT 2019-02-16 21:45:23,929 INFO sqlalchemy.engine.base.Engine BEGIN (implicit) 2019-02-16 21:45:23,929 INFO sqlalchemy.engine.base.Engine SELECT users.id AS users_id, users.name AS users_name, users.fullname AS users_fullname, users.nickname AS users_nickname FROM users WHERE users.id < ? 2019-02-16 21:45:23,929 INFO sqlalchemy.engine.base.Engine (2,) [<User(name='ed', fullname='Ed Jones', nickname='edsnickname')>] 2019-02-16 21:45:23,931 INFO sqlalchemy.engine.base.Engine SELECT users.id AS users_id, users.name AS users_name, users.fullname AS users_fullname, users.nickname AS users_nickname FROM users WHERE users.id <= ? 2019-02-16 21:45:23,931 INFO sqlalchemy.engine.base.Engine (5,) [<User(name='ed', fullname='Ed Jones', nickname='edsnickname')>, <User(name='wendy', fullname='Wendy Williams', nickname='windy')>, <User(name='mary', fullname='Mary Contrary', nickname='mary')>] 2019-02-16 21:45:23,932 INFO sqlalchemy.engine.base.Engine UPDATE users SET name=? WHERE users.id = ? 2019-02-16 21:45:23,932 INFO sqlalchemy.engine.base.Engine ('admin', 1) 2019-02-16 21:45:23,933 INFO sqlalchemy.engine.base.Engine INSERT INTO users (name, fullname, nickname) VALUES (?, ?, ?) 2019-02-16 21:45:23,933 INFO sqlalchemy.engine.base.Engine ('fred', 'Fred Flintstone', 'freddy') 2019-02-16 21:45:23,934 INFO sqlalchemy.engine.base.Engine UPDATE users SET name=? WHERE users.id = ? 2019-02-16 21:45:23,934 INFO sqlalchemy.engine.base.Engine ('test', 2) 2019-02-16 21:45:23,935 INFO sqlalchemy.engine.base.Engine SELECT users.id AS users_id, users.name AS users_name, users.fullname AS users_fullname, users.nickname AS users_nickname FROM users WHERE users.id <= ? 2019-02-16 21:45:23,935 INFO sqlalchemy.engine.base.Engine (5,) [<User(name='admin', fullname='Ed Jones', nickname='edsnickname')>, <User(name='test', fullname='Wendy Williams', nickname='windy')>, <User(name='mary', fullname='Mary Contrary', nickname='mary')>, <User(name='fred', fullname='Fred Flintstone', nickname='freddy')>]
由于我们设置 create_engine 中 echo 为 True,因此在执行结果中包含了 SQLAlchemy 打印的 SQL 语句,我们可以取消 crete_engine 中的 echo
engine = create_engine('sqlite:///./sqlalchemy.sqlite')
此时的执行结果如下:
[<User(name='ed', fullname='Ed Jones', nickname='edsnickname')>] [<User(name='ed', fullname='Ed Jones', nickname='edsnickname')>, <User(name='wendy', fullname='Wendy Williams', nickname='windy')>, <User(name='mary', fullname='Mary Contrary', nickname='mary')>] [<User(name='admin', fullname='Ed Jones', nickname='edsnickname')>, <User(name='test', fullname='Wendy Williams', nickname='windy')>, <User(name='mary', fullname='Mary Contrary', nickname='mary')>, <User(name='fred', fullname='Fred Flintstone', nickname='freddy')>]
当取消 echo 后,程序运行结果中原有的 SQL 语句消失。
本文只是对 SQLAlchemy 的使用进行简单的介绍,SQLAlchemy 本身还有很多特性和运用方法我们可以共同探讨。
标签:SQLite
相关阅读 >>
android开发之contentprovider的使用详解
django 将自带的数据库Sqlite3改成mysql实例
android studio3.6.3 当前最新版本数据库查找与导出方法(图文详解)
更多相关阅读请进入《Sqlite》频道 >>

数据库系统概念 第6版
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。