python访问数据库, SQLAlchemy中的Query方法
- 格式:doc
- 大小:52.00 KB
- 文档页数:5
sqlalchemy 2.0用法SQLAlchemy是一个Python的SQL工具和对象关系映射(ORM)库,可用于创建和执行SQL语句,并将数据存储在数据库中。
SQLAlchemy 2.0是SQLAlchemy的最新版本,引入了一些新的功能和改进。
以下是关于SQLAlchemy 2.0使用方法的参考内容:1. 安装SQLAlchemy2.0:- 使用pip命令安装SQLAlchemy 2.0:`pip install SQLAlchemy==2.0`2. 连接到数据库:- 导入`create_engine`函数:`from sqlalchemy importcreate_engine`- 创建一个数据库引擎对象:`engine = create_engine('数据库URL')`- 连接到数据库:`connection = engine.connect()`- 关闭连接:`connection.close()`3. 创建数据表:- 导入`MetaData`和`Table`类:`from sqlalchemy import MetaData, Table`- 创建一个MetaData对象:`metadata = MetaData()`- 定义一个表结构:`my_table = Table('my_table', metadata, ...)`,其中`...`表示表的列定义等- 创建表:`metadata.create_all(engine)`4. 插入数据:- 导入`insert`函数:`from sqlalchemy import insert`- 定义插入语句:`stmt = insert(my_table).values(...)`- 执行插入语句:`result = connection.execute(stmt)`5. 查询数据:- 导入`select`函数:`from sqlalchemy import select`- 定义查询语句:`stmt = select([my_table])`- 执行查询语句:`result = connection.execute(stmt)`- 获取结果:`rows = result.fetchall()`,`fetchall()`返回所有结果行的列表6. 更新数据:- 导入`update`函数:`from sqlalchemy import update`- 定义更新语句:`stmt =update(my_table).where(...).values(...)`- 执行更新语句:`result = connection.execute(stmt)`7. 删除数据:- 导入`delete`函数:`from sqlalchemy import delete`- 定义删除语句:`stmt = delete(my_table).where(...)`- 执行删除语句:`result = connection.execute(stmt)`8. 使用ORM:- 定义ORM映射类:`class MyTable(Base): ...`- 创建会话对象:`from sqlalchemy.orm import sessionmaker`,`Session = sessionmaker(bind=engine)`,`session = Session()`- 增删改查操作使用会话对象:`session.add(...)`,`session.delete(...)`, `mit()`, `session.query(...)`9. 事务处理:- 使用`with`语句创建事务块,自动提交和回滚:`with connection.begin() as trans: ...`- 在事务块中执行多个SQL操作,如果出现异常,则回滚事务,否则提交事务10. 高级查询:- 使用`filter`函数进行条件过滤:`query.filter(...)`- 使用`join`函数进行表连接查询:`query.join(...)`- 使用`order_by`函数进行排序:`query.order_by(...)`- 使用`limit`和`offset`函数进行分页查询:`query.limit(n).offset(m)`- 使用`group_by`函数进行分组查询:`query.group_by(...)` - 使用`having`函数进行分组过滤:`query.having(...)`- 使用`count`函数进行计数查询:`query.count()`以上是关于SQLAlchemy 2.0的一些基本用法和参考内容,希望对你有帮助!。
flask-sqlalchemy查询语句Flask-SQLAlchemy是一个用于Flask框架的SQLAlchemy扩展,它简化了在Flask应用程序中使用SQLAlchemy的过程。
在进行查询操作时,我们可以使用Flask-SQLAlchemy提供的API来构建查询语句。
下面是十个使用Flask-SQLAlchemy进行查询的示例:1. 查询所有的用户信息```users = User.query.all()```这将返回一个包含所有用户信息的列表。
2. 查询特定条件下的用户信息```users = User.query.filter_by(age=18).all()```这将返回满足条件的年龄为18岁的所有用户信息。
3. 查询特定条件下的单个用户信息```user = User.query.filter_by(name='John').first()```这将返回满足条件的名字为John的第一个用户信息。
4. 查询某个字段的唯一值```ages = db.session.query(User.age).distinct().all()```这将返回用户表中age字段的所有唯一值。
5. 查询某个字段的数量```count = db.session.query(func.count(User.id)).scalar()```这将返回用户表中id字段的总数。
6. 查询多个表的信息```result = db.session.query(User, Post).join(Post, User.id == er_id).all()```这将返回用户表和帖子表关联的信息。
7. 查询排序后的用户信息```users = User.query.order_by(User.age.desc()).all()```这将返回按照年龄降序排序的所有用户信息。
8. 查询分页后的用户信息```users = User.query.paginate(page=1, per_page=10).items```这将返回第一页每页10条的用户信息。
Python3和SQLAlchemy查询语句详解
在Python编程语言中,SQLAlchemy是一个流行的对象关系映射(ORM)库,它使数据库操作变得更简单。
通过SQLAlchemy,你可以使用Python类和对象来表示数据库表,并使用Python代码来执行CRUD(创建、读取、更新、删除)操作。
在SQLAlchemy中,查询是执行数据检索的主要方式。
下面是一个简单的Python3和SQLAlchemy查询语句的详解。
首先,你需要安装SQLAlchemy。
如果你还没有安装,可以使用pip来安装:
然后,你可以创建一个Engine来连接到数据库:
接下来,你可以定义一个Python类来表示数据库表。
例如,假设你有一个名为"users"的表,它有"id"、"name"和"email"字段。
你可以创建一个名为"User"的Python类:
现在,你可以使用SQLAlchemy查询来从数据库中检索数据。
最基本的查询是使用select()函数:
你可以添加条件来过滤结果。
例如,下面的查询将返回所有名字为"John"的用户:
你还可以添加更多条件,使用and_和or_函数:
最后,你可以执行查询并将结果转换为Python对象列表:
现在,users变量包含一个User对象的列表,每个对象表示数据库中的一行数据。
你可以使用Python的属性访问方式来访问这些对象的属性,例如 和user.email。
PythonSQLAlchemy⼊门教程(基本⽤法)本⽂将以Mysql举例,介绍sqlalchemy的基本⽤法。
其中,Python版本为2.7,sqlalchemy版本为1.1.6。
⼀. 介绍SQLAlchemy是Python中最有名的ORM⼯具。
关于ORM:全称Object Relational Mapping(对象关系映射)。
特点是操纵Python对象⽽不是SQL查询,也就是在代码层⾯考虑的是对象,⽽不是SQL,体现的是⼀种程序化思维,这样使得Python程序更加简洁易读。
具体的实现⽅式是将数据库表转换为Python类,其中数据列作为属性,数据库操作作为⽅法。
优点:简洁易读:将数据表抽象为对象(数据模型),更直观易读可移植:封装了多种数据库引擎,⾯对多个数据库,操作基本⼀致,代码易维护更安全:有效避免SQL注⼊为什么要⽤sqlalchemy?虽然性能稍稍不及原⽣SQL,但是操作数据库真的很⽅便!⼆. 使⽤概念和数据类型概念概念对应数据库说明Engine连接驱动引擎Session连接池,事务由此开始查询Model表类定义Column列Query若⼲⾏可以链式添加多个条件常见数据类型数据类型数据库数据类型python数据类型说明Integer int int整形,32位String varchar string字符串Text text string长字符串Float float float浮点型Boolean tinyint bool True / FalseDate date datetime.date存储时间年⽉⽇DateTime datetime datetime.datetime存储年⽉⽇时分秒毫秒等Time time datetime.datetime存储时分秒创建数据库表1.安装pip install SQLalchemy2. 创建连接from sqlalchemy import create_engineengine = create_engine("mysql://user:password@hostname/dbname?charset=uft8")这⾏代码初始化创建了Engine,Engine内部维护了⼀个Pool(连接池)和Dialect(⽅⾔),⽅⾔来识别具体连接数据库种类。
FastAPI数据库访问(⼀)使⽤SQLAlchemy访问关系数据库SQLAlchemy是⼀个基于Python实现的ORM框架。
它提供了⼀种⽅法,⽤于将⽤户定义的Python类与数据库表相关联,并将这些类(对象)的实例与其对应表中的⾏相关联。
它包括⼀个透明地同步对象及其相关⾏之间状态的所有变化的系统,以及根据⽤户定义的类及其定义的彼此之间的关系表达数据库查询的系统。
关于SQLAlchemy的具体使⽤细节这⾥不再赘述,重点讲述数据库模型与Pydantic模型使⽤、以及数据库Session有关的内容。
这⾥我们以MySQL为例。
SQLAlchemy本⾝⽆法操作数据库,其必须借助pymysql等第三⽅插件。
pip install pymysqlpip install sqlalchemy⼀、⾸先实现对数据库的操作这⾥以联系⼈为例,实现了对联系⼈数据的新增、读取以及更新操作:注意,这⾥的数据模型DBUser指的是与数据库相关的数据模型。
from sqlalchemy import Column, DateTime, String, text, create_enginefrom sqlalchemy.dialects.mysql import INTEGER, VARCHARfrom sqlalchemy.orm import sessionmakerfrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy.orm import Session# db connect config(略,可⾃⾏填写)MYSQL_USER = ''MYSQL_PASS = ''MYSQL_HOST = ''MYSQL_PORT = '3306'MYSQL_DB = ''SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://%s:%s@%s:%s/%s' % (MYSQL_USER, MYSQL_PASS, MYSQL_HOST, MYSQL_PORT, MYSQL_DB)# 创建对象的基类:Base = declarative_base()# 初始化数据库连接:engine = create_engine(SQLALCHEMY_DATABASE_URI)# SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)SessionLocal = sessionmaker(bind=engine)class DBUser(Base):__tablename__ = 'test_user'id = Column(INTEGER(64), primary_key=True, comment='编号')username = Column(String(100))password = Column(String(100))sex = Column(VARCHAR(10), server_default=text("''"), comment='性别')login_time = Column(INTEGER(11), server_default=text("'0'"), comment='登陆时间,主要为了登陆JWT校验使⽤')create_date = Column(DateTime, nullable=False, server_default=text("CURRENT_TIMESTAMP"))update_date = Column(DateTime, nullable=False, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"))@classmethoddef add(cls, db: Session, data):db.add(data)mit()# db.refresh(data)@classmethoddef get_by_username(cls, db: Session, username):data = db.query(cls).filter_by(username=username).first()return data@classmethoddef update(cls, db: Session, username, sex):db.query(cls).filter_by(username=username).update({cls.sex: sex})mit()这⾥的db:Session从调⽤者中传⼊,每次请求只会⽤⼀个数据库Session,请求结束后关闭。
python将数据写入多个数据库的方法Python是一种功能强大的编程语言,它提供了多种方法将数据写入多个数据库。
在本文中,我们将讨论一些常用的方法来实现这一目标。
1. 使用SQLAlchemy库:SQLAlchemy是一个流行的Python SQL工具包,它提供了一种简洁的方式将数据写入多个数据库。
首先,我们需要安装SQLAlchemy库,可以使用以下命令:```pip install SQLAlchemy```接下来,我们可以创建一个数据库引擎并连接到多个数据库。
然后,可以使用Session对象将数据写入这些数据库。
下面是一个示例代码:```pythonfrom sqlalchemy import create_enginefrom sqlalchemy.orm import sessionmaker# 连接到数据库1engine1 = create_engine('数据库1的连接字符串')Session1 = sessionmaker(bind=engine1)session1 = Session1()# 连接到数据库2engine2 = create_engine('数据库2的连接字符串')Session2 = sessionmaker(bind=engine2)session2 = Session2()# 将数据写入数据库1data = {'column1': 'value1', 'column2': 'value2'}session1.execute("INSERT INTO table_name (column1, column2) VALUES (:column1, :column2)", data)# 将数据写入数据库2data = {'column1': 'value3', 'column2': 'value4'}session2.execute("INSERT INTO table_name (column1, column2) VALUES (:column1, :column2)", data)mit()mit()```通过这种方法,我们可以轻松地将数据写入多个数据库。
SQLAlchemy 是一个Python 的SQL 工具包和对象关系映射(ORM) 系统,它为数据库交互提供了丰富的功能。
以下是SQLAlchemy 的一些基本语法和概念:创建引擎:pythonfrom sqlalchemy import create_engineengine = create_engine('sqlite:///example.db')创建表:pythonfrom sqlalchemy import Column, Integer, Stringfrom sqlalchemy.ext.declarative import declarative_baseBase = declarative_base()class User(Base):__tablename__ = 'users'id = Column(Integer, primary_key=True)name = Column(String)fullname = Column(String)nickname = Column(String)插入数据:pythonfrom sqlalchemy.orm import sessionmakerSession = sessionmaker(bind=engine)session = Session()new_user = User(name='new', fullname='New User', nickname='newbie')session.add(new_user)mit()查询数据:pythonusers = session.query(User).filter_by(name='new').all()更新数据:pythonuser = session.query(User).filter_by(name='new').first()user.fullname = 'Updated Full Name'mit()删除数据:pythonuser = session.query(User).filter_by(name='new').first()session.delete(user)mit()关联表:使用关系(relationship)来定义两个表之间的关系。
flask sqlalchemy 原始sql查询方法
python
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)
# 定义一个简单的模型
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50), nullable=False)
# 执行原始SQL 查询
result = db.session.execute("SELECT * FROM user")
for row in result:
print(row)
在上面的示例中,我们首先导入了Flask 和Flask-SQLAlchemy,并创建了一个Flask 应用和数据库实例。
然后,我们定义了一个简单的User 模型,并在app 对象中创建了一个User 表的实例。
接下来,我们使用db.session.execute() 方法执行了一个原始SQL 查询,查询了user 表中的所有记录。
该方法返回一个可迭代的结果集,我们可以使用for 循环遍历结果集并打印每一行数据。
需要注意的是,使用原始SQL 查询时需要谨慎,确保查询的安全性,避免SQL 注入等安全问题。
pythonflask框架配置mysql数据库以及SQLAlchemy对数据库的操作 本⼈是⼀个没有做笔记习惯的低级程序员,但是我还是喜欢编程,最近发现⾃⼰的记忆⼒严重的下降,原来⾃⼰学过的东西过段差不多都忘记了,现在才想起⽤博客记录⼀下,⽅便以后⾃⼰查看,同时也是为了能更好的提⾼⾃⼰的能⼒。
最近在学习flask框架和mysql,所以再此总结⼀下。
⼀ flask框架mysql⽂件 通过看别的⼤佬的项⽬最常见的配置mysql就是 1)创建⼀个config.py⽂件class BaseConfig(object):# 数据库的配置DIALCT = "mysql"DRITVER = "pymysql"HOST = '127.0.0.1'PORT = "3306"USERNAME = "root"PASSWORD = "123456"DBNAME = 'test_auto'SQLALCHEMY_DATABASE_URI = f"{DIALCT}+{DRITVER}://{USERNAME}:{PASSWORD}@{HOST}:{PORT}/{DBNAME}?charset=utf8"SQLALCHEMY_TRACK_MODIFICATIONS = True2)导⼊config⽂件通过app,config添加配置⽂件from flask import Flaskfrom config import BaseConfigfrom flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)#添加配置⽂件app.config.from_object(BaseConfig)#初始化扩展,传⼊app 创建dbdb = SQLAlchemy(app)3 )config.py配置⽂件的 SQLALCHEMY_DATABASE_URI 以及SQLALCHEMY_TRACK_MODIFICATIONS注意不要写错这些变量可以在\Python37\Lib\site-packages\flask_sqlalchemy\__init__.py⽬录下查看SQLAlchemy的默认配置⽂件和\Python37\Lib\site-packages\flask\app.py⽬录下查看config的默认配置⽂件 app.config的默认配置⽂件default_config = ImmutableDict({"ENV": None,"DEBUG": None,"TESTING": False,"PROPAGATE_EXCEPTIONS": None,"PRESERVE_CONTEXT_ON_EXCEPTION": None,"SECRET_KEY": None,"PERMANENT_SESSION_LIFETIME": timedelta(days=31),"USE_X_SENDFILE": False,"SERVER_NAME": None,"APPLICATION_ROOT": "/","SESSION_COOKIE_NAME": "session","SESSION_COOKIE_DOMAIN": None,"SESSION_COOKIE_PATH": None,"SESSION_COOKIE_HTTPONLY": True,"SESSION_COOKIE_SECURE": False,"SESSION_COOKIE_SAMESITE": None,"SESSION_REFRESH_EACH_REQUEST": True,"MAX_CONTENT_LENGTH": None,"SEND_FILE_MAX_AGE_DEFAULT": None,"TRAP_BAD_REQUEST_ERRORS": None,"TRAP_HTTP_EXCEPTIONS": False,"EXPLAIN_TEMPLATE_LOADING": False,"PREFERRED_URL_SCHEME": "http","JSON_AS_ASCII": True,"JSON_SORT_KEYS": True,"JSONIFY_PRETTYPRINT_REGULAR": False,"JSONIFY_MIMETYPE": "application/json","TEMPLATES_AUTO_RELOAD": None,"MAX_COOKIE_SIZE": 4093,})sqlalchemy的默认配置⽂件if ('SQLALCHEMY_DATABASE_URI'not in app.config and'SQLALCHEMY_BINDS'not in app.config):warnings.warn('Neither SQLALCHEMY_DATABASE_URI nor SQLALCHEMY_BINDS is set. ''Defaulting SQLALCHEMY_DATABASE_URI to "sqlite:///:memory:".')app.config.setdefault('SQLALCHEMY_DATABASE_URI', 'sqlite:///:memory:')app.config.setdefault('SQLALCHEMY_BINDS', None)app.config.setdefault('SQLALCHEMY_NATIVE_UNICODE', None)app.config.setdefault('SQLALCHEMY_ECHO', False)app.config.setdefault('SQLALCHEMY_RECORD_QUERIES', None)app.config.setdefault('SQLALCHEMY_POOL_SIZE', None)app.config.setdefault('SQLALCHEMY_POOL_TIMEOUT', None)app.config.setdefault('SQLALCHEMY_POOL_RECYCLE', None)app.config.setdefault('SQLALCHEMY_MAX_OVERFLOW', None)app.config.setdefault('SQLALCHEMY_COMMIT_ON_TEARDOWN', False)track_modifications = app.config.setdefault('SQLALCHEMY_TRACK_MODIFICATIONS', None)4)创建数据查询模型并继承db.Model⼆,直接使⽤SQLAlchemy连接mysql,不⽤通过flask框架1),SQLAlchemy和pymsql的安装,在使⽤SQLAlchemy连接mysql前需要先给Python安装MySQL驱动,由于MySQL不⽀持Python3,所以可以同pymsql与SQLAlchemy进⾏交互pip install pymysqlpip install sqlalchemy2),连接数据库连接数据库的引擎参数形式engine = create_engine("数据库类型+数据库驱动://数据库⽤户名:数据库密码@IP地址:端⼝号/数据库?编码...", 其它参数)注意:charset是utf8⽽不是utf-8,不能带- 不然会包异常engine = create_engine("mysql+pymysql://root:123456@127.0.0.1:3306/test_auto?charset=utf8",echo=True)echo=True, # 设置为True,程序运⾏时反馈执⾏过程中的关键对象,包括 ORM 构建的 sql 语句pool_size=5, # 数据库连接池初始化的容量,保持的连接数,初始化时,并不产⽣连接。
sqlalchemy 2.0 中select用法SQLAlchemy是一个Python的ORM(Object Relational Mapping)库,提供了一种方便的方法来处理数据库操作。
在SQLAlchemy 2.0版本中,select语句是其中一项重要的功能,可用于从数据库中检索数据。
本文将介绍SQLAlchemy 2.0中select的用法,包括基本的select语句、条件查询、排序、分组、聚合函数以及连接查询等内容。
我们将一步一步深入讲解,帮助读者理解和运用select语句。
第一步:导入SQLAlchemy库和所需的模块在开始编写select语句之前,我们需要先导入SQLAlchemy库和所需的模块。
在SQLAlchemy 2.0中,我们需要导入以下模块:pythonfrom sqlalchemy import create_enginefrom sqlalchemy.orm import sessionmakerfrom sqlalchemy import select通过create_engine函数创建数据库连接引擎,并使用sessionmaker函数创建数据库会话。
第二步:创建数据库引擎和会话在使用select语句之前,我们需要创建数据库引擎和会话。
可以使用create_engine函数来创建一个数据库引擎对象,需要传入数据库的连接信息,例如数据库的URL、用户名和密码等。
例如:pythonengine =create_engine('mysql+mysqlconnector:username:password@host:port/ database')接下来,我们可以使用sessionmaker函数创建一个会话工厂,并将创建的引擎传递给它。
例如:pythonSession = sessionmaker(bind=engine)session = Session()现在,我们已经创建了数据库引擎和会话,可以开始使用select语句。
SQLAlchemy中的Query方法在SQLAlchemy中执行查询是通过session对象的query方法完成的。
query方法非常灵活,你可以根据需要使用不同的查询方式查找数据,下面一一举例。
1.直接通过映射类查找:#Querying user instancefor instance in session.query(User).order_by(User.id):print ,instance.fullname这种方法只要在query方法中,将映射类作为参数,就可以查询出这个映射类代表的数据库表中的数据。
其相当于下面的SQL语句:SELECT users.id AS users_id, AS users_name,users.fullname AS users_fullname, users.password AS users_passwordFROM users ORDER BY users.id2.通过映射类的属性字段查询:#Querying by ORM-instrumentfor name,fullname in session.query(,User.fullname):print name,fullname这种方法指定了查询的具体字段,而不是像第一种方法那样把映射类的所有字段都查询出来,其相当于执行了下面的SQL语句:SELECT AS users_name, users.fullname AS users_fullnameFROM users3.query查询的结果是保存在一个元组中的,所以我们可以在query中指定返回整个的映射类对象和其中的部分属性字段:#Querying as a Python objectfor row in session.query(User,).all():print er,这种查询方法可以返回一个User对象以及它的name属性字段的值,其相当于执行了下面的SQL语句:SELECT users.id AS users_id, AS users_name, users.fullname ASusers_fullname, users.password AS users_passwordFROM users其输出结果为一个元组和一个字符串:<</span>user("ed","Ed Jones","f8x902")> ed<</span>user("Wendy","Wendy Williams","foobar")> Wendy<</span>user("Marry","Marry Contrary","xxg527")> Marry<</span>user("Fred","Fred Flinstone","blah")> Fred4.我们还可以给返回的结果起一个别名,或者叫标签:#Querying labeledfor row in session.query(bel('name_label')).all():print (_label)这里的关键是label方法,它的意思是把User的name字段改个名字叫name_label,其相当于执行以下的SQL语句:SELECT AS name_labelFROM users6.除了给映射类字段起别名,我们还可以给映射类起个别名:#Querying with aliasedfrom sqlalchemy.orm import aliaseduser_alias=aliased(User,name='user_alias')for row in session.query(user_alias,user_).all():print er_alias这里要注意的是,我们引入了aliased函数,并且给User映射类起了个别名叫user_alias。
然后我们就可以在query中使用这个别名了,它相当于是User对象。
上面的代码相当于执行了以下SQL语句:SELECT user_alias.id AS user_alias_id, user_ AS user_alias_name,user_alias.fullname AS user_alias_fullname, user_alias.password ASuser_alias_passwordFROM users AS user_alias7.由于query的查询返回的是一个元组,所以我们可以利用Python对数组类对象进行“分片”的操作,来限制返回的结果集范围:#Querying with limit and offsetfor u in session.query(User).order_by(User.id)[1:3]:print u这里我们对返回的结果加上了[1:3],来限制返回的结果集范围。
其执行相当于下面的SQL 语句:SELECT users.id AS users_id, AS users_name,users.fullname AS users_fullname, users.password AS users_passwordFROM users ORDER BY users.idLIMIT ? OFFSET ?8.前面的查询都没有涉及到子查询,也就是SQL的where子句。
在SQLAlchemy框架中,query 的子查询可以通过filter_by来实现:#Qyering with filter byfor name, in session.query().filter_by(fullname='Ed Jones'):print name上面的查询相当于要找出User映射表中fullname为’Ed Jones’的数据,其相当于执行了下面的SQL语句:SELECT AS users_nameFROM usersWHERE users.fullname = ?9.除了filter_by之外,我们还可以使用filter方法,这种方式看起来更灵活,我们可以按照映射类对象的属性来指定查询条件:#Querying with filterfor name, in session.query().filter(User.fullname=='Ed Jones'):print name其参数与filter_by不同,这里使用了映射类名加属性字段的方式来指定查询子句参数,其相当于执行了下面的SQL语句:SELECT AS users_nameFROM usersWHERE users.fullname = ?如果我们想要嵌套多个查询条件,可以嵌套多个filter:#Querying with fully generativefor name, in session.query().filter(User.fullname=='EdJones').filter(=='ed'):print name可以看到我们在filter方法后面又嵌套了一个filter,理论上可以嵌套无数个,其相当于执行了下面的SQL语句:SELECT AS users_nameFROM usersWHERE users.fullname = ? AND = ?完整的示例代码如下:from sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import Column,Integer,Stringfrom sqlalchemy import Sequencefrom sqlalchemy.orm import sessionmakerBase=declarative_base()from sqlalchemy import create_engineengine=create_engine('sqlite:///:memory:',echo=True)class User(Base):__tablename__='users'id=Column(Integer,Sequence('user_id_seq'),primary_key=True)name=Column(String(50))fullname=Column(String(50))password=Column(String(12))def __init__(self,name,fullname,password):=nameself.fullname=fullnameself.password=passworddef __repr__(self):return '' %(,self.fullname,self.password)Base.metadata.create_all(engine)Session=sessionmaker(bind=engine)session=Session()#Add on usered_user=User('ed','Ed Jones','edpassword')session.add(ed_user)#Retrive saved ed_userour_user=session.query(User).filter_by(name='ed').first()print 'our_user is:',our_userprint 'our_user id is:',our_user.idprint 'our_user is ed_user',our_user==ed_user#Add multiple objectsession.add_all([User('Wendy','Wendy Williams','foobar'),User('Marry','Marry Contrary','xxg527'),User('Fred','Fred Flinstone','blah')])#Detective the dirty dataed_user.password='f8x902'print 'Dirty data',session.dirty#Detective the new dataprint 'New data',session.new#Commit datamit()#========Querying===============#Querying user instancefor instance in session.query(User).order_by(User.id):print ,instance.fullname#Querying by ORM-instrumentfor name,fullname in session.query(,User.fullname): print name,fullname#Querying as a Python objectfor row in session.query(User,).all():print er,#Querying labeledfor row in session.query(bel('name_label')).all(): print (_label)#Querying with aliasedfrom sqlalchemy.orm import aliaseduser_alias=aliased(User,name='user_alias')for row in session.query(user_alias,user_).all():print er_alias#Querying with limit and offsetfor u in session.query(User).order_by(User.id)[1:3]:print u#Qyering with filter byfor name, in session.query().filter_by(fullname='Ed Jones'):print name#Querying with filterfor name, in session.query().filter(User.fullname=='Ed Jones'): print name#Querying with fully generativefor name, in session.query().filter(User.fullname=='EdJones').filter(=='ed'):print namePython标准函数库, SQLAlcehemy。