SQLAlchemy是Python中最流行的ORM(对象关系映射)框架之一,它提供了高效且灵活的数据库操作方式。本文将介绍如何使用SQLAlchemy ORM进行数据库操作。
目录
安装SQLAlchemy
核心概念
连接数据库
定义数据模型
创建数据库表
基本CRUD操作
查询数据
关系操作
事务管理
最佳实践
安装
bash
pip install sqlalchemy
如果需要连接特定数据库,还需安装相应的驱动程序:
bash
# PostgreSQL
pip install psycopg2-binary
# MySQL
pip install mysql-connector-python
# SQLite (Python标准库已包含,无需额外安装)
核心概念
-
Engine:数据库连接的引擎,负责与数据库通信
-
Session:数据库会话,管理所有持久化操作
-
Model:数据模型类,对应数据库中的表
-
Query:查询对象,用于构建和执行数据库查询
连接数据库
python
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
# 创建数据库连接引擎
# SQLite示例
engine = create_engine('sqlite:///example.db', echo=True)
# PostgreSQL示例
# engine = create_engine('postgresql://username:password@localhost:5432/mydatabase')
# MySQL示例
# engine = create_engine('mysql+mysqlconnector://username:password@localhost:3306/mydatabase')
# 创建会话工厂
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
# 创建会话实例
session = SessionLocal()
定义数据模型
python
from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.orm import relationship, declarative_base
# 创建基类
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True, index=True)
name = Column(String(50), nullable=False)
email = Column(String(100), unique=True, index=True)
# 定义一对多关系
posts = relationship("Post", back_populates="author")
class Post(Base):
__tablename__ = 'posts'
id = Column(Integer, primary_key=True, index=True)
title = Column(String(100), nullable=False)
content = Column(String(500))
author_id = Column(Integer, ForeignKey('users.id'))
# 定义多对一关系
author = relationship("User", back_populates="posts")
# 定义多对多关系(通过关联表)
tags = relationship("Tag", secondary="post_tags", back_populates="posts")
class Tag(Base):
__tablename__ = 'tags'
id = Column(Integer, primary_key=True, index=True)
name = Column(String(30), unique=True, nullable=False)
posts = relationship("Post", secondary="post_tags", back_populates="tags")
# 关联表(用于多对多关系)
class PostTag(Base):
__tablename__ = 'post_tags'
post_id = Column(Integer, ForeignKey('posts.id'), primary_key=True)
tag_id = Column(Integer, ForeignKey('tags.id'), primary_key=True)
创建数据库表
python
# 创建所有表
Base.metadata.create_all(bind=engine)
# 删除所有表
# Base.metadata.drop_all(bind=engine)
基本CRUD操作
创建数据
python
# 创建新用户
new_user = User(name="张三", email="zhangsan@example.com")
session.add(new_user)
session.commit()
# 批量创建
session.add_all([
User(name="李四", email="lisi@example.com"),
User(name="王五", email="wangwu@example.com")
])
session.commit()
读取数据
python
# 获取所有用户
users = session.query(User).all()
# 获取第一个用户
first_user = session.query(User).first()
# 根据ID获取用户
user = session.query(User).get(1)
更新数据
python
# 查询并更新
user = session.query(User).get(1)
user.name = "张三四"
session.commit()
# 批量更新
session.query(User).filter(User.name.like("张%")).update({"name": "张氏"}, synchronize_session=False)
session.commit()
删除数据
python
# 查询并删除
user = session.query(User).get(1)
session.delete(user)
session.commit()
# 批量删除
session.query(User).filter(User.name == "李四").delete(synchronize_session=False)
session.commit()
查询数据
基本查询
python
# 获取所有记录
users = session.query(User).all()
# 获取特定字段
names = session.query(User.name).all()
# 排序
users = session.query(User).order_by(User.name.desc()).all()
# 限制结果数量
users = session.query(User).limit(10).all()
# 偏移量
users = session.query(User).offset(5).limit(10).all()
过滤查询
python
from sqlalchemy import or_
# 等值过滤
user = session.query(User).filter(User.name == "张三").first()
# 模糊查询
users = session.query(User).filter(User.name.like("张%")).all()
# IN查询
users = session.query(User).filter(User.name.in_(["张三", "李四"])).all()
# 多条件查询
users = session.query(User).filter(
User.name == "张三",
User.email.like("%@example.com")
).all()
# 或条件
users = session.query(User).filter(
or_(User.name == "张三", User.name == "李四")
).all()
# 不等于
users = session.query(User).filter(User.name != "张三").all()
聚合查询
python
from sqlalchemy import func
# 计数
count = session.query(User).count()
# 分组计数
user_post_count = session.query(
User.name,
func.count(Post.id)
).join(Post).group_by(User.name).all()
# 求和、平均值等
avg_id = session.query(func.avg(User.id)).scalar()
连接查询
python
# 内连接
results = session.query(User, Post).join(Post).filter(Post.title.like("%Python%")).all()
# 左外连接
results = session.query(User, Post).outerjoin(Post).all()
# 指定连接条件
results = session.query(User, Post).join(Post, User.id == Post.author_id).all()
关系操作
python
# 创建带关系的对象
user = User(name="赵六", email="zhaoliu@example.com")
post = Post(title="我的第一篇博客", content="Hello World!", author=user)
session.add(post)
session.commit()
# 通过关系访问
print(f"文章 '{post.title}' 的作者是 {post.author.name}")
print(f"用户 {user.name} 的所有文章:")
for p in user.posts:
print(f" – {p.title}")
# 多对多关系操作
python_tag = Tag(name="Python")
sqlalchemy_tag = Tag(name="SQLAlchemy")
post.tags.append(python_tag)
post.tags.append(sqlalchemy_tag)
session.commit()
print(f"文章 '{post.title}' 的标签:")
for tag in post.tags:
print(f" – {tag.name}")
事务管理
python
# 自动提交事务
try:
user = User(name="测试用户", email="test@example.com")
session.add(user)
session.commit()
except Exception as e:
session.rollback()
print(f"发生错误: {e}")
# 使用事务上下文管理器
from sqlalchemy.orm import Session
def create_user(session: Session, name: str, email: str):
try:
user = User(name=name, email=email)
session.add(user)
session.commit()
return user
except:
session.rollback()
raise
# 嵌套事务
with session.begin_nested():
user = User(name="事务用户", email="transaction@example.com")
session.add(user)
# 保存点
savepoint = session.begin_nested()
try:
user = User(name="保存点用户", email="savepoint@example.com")
session.add(user)
savepoint.commit()
except:
savepoint.rollback()
最佳实践
会话管理:为每个请求创建新会话,请求结束后关闭
异常处理:始终处理异常并适当回滚事务
延迟加载:注意N+1查询问题,使用 eager loading 优化
连接池:合理配置连接池大小和超时设置
数据验证:在模型层或应用层验证数据完整性
python
# 使用上下文管理器管理会话
from contextlib import contextmanager
@contextmanager
def get_db():
db = SessionLocal()
try:
yield db
db.commit()
except Exception:
db.rollback()
raise
finally:
db.close()
# 使用示例
with get_db() as db:
user = User(name="上下文用户", email="context@example.com")
db.add(user)
总结
SQLAlchemy ORM提供了强大而灵活的数据库操作方式,通过本文的介绍,您应该能够:
安装和配置SQLAlchemy
定义数据模型和关系
执行基本的CRUD操作
构建复杂查询
管理数据库事务
遵循最佳实践
SQLAlchemy还有更多高级特性,如混合属性、事件监听、自定义查询等,值得进一步探索学习。
https://gitee.com/qhxlh254/ipnknrorwa/issues/IE1IBF
https://gitee.com/ttxfi490/sleiepzefq/issues/IE1IBB
https://gitee.com/qhxlh254/ipnknrorwa/issues/IE1IBA
https://gitee.com/ttxfi490/sleiepzefq/issues/IE1IB8
https://gitee.com/hxumo057/okwzzjluzj/issues/IE1IB7
https://gitee.com/oxjqd444/gcyfwzcfms/issues/IE1IB5
https://gitee.com/qhxlh254/ipnknrorwa/issues/IE1IB3
https://gitee.com/ttxfi490/sleiepzefq/issues/IE1IB1
https://gitee.com/hxumo057/okwzzjluzj/issues/IE1IAX
https://gitee.com/qhxlh254/ipnknrorwa/issues/IE1IAV
https://gitee.com/oxjqd444/gcyfwzcfms/issues/IE1IAU
https://gitee.com/hxumo057/okwzzjluzj/issues/IE1IAS
https://gitee.com/ttxfi490/sleiepzefq/issues/IE1IAO
https://gitee.com/oxjqd444/gcyfwzcfms/issues/IE1IAL
https://gitee.com/qhxlh254/ipnknrorwa/issues/IE1IAM
https://gitee.com/hxumo057/okwzzjluzj/issues/IE1IAK
https://gitee.com/oxjqd444/gcyfwzcfms/issues/IE1IAI
https://gitee.com/ttxfi490/sleiepzefq/issues/IE1IAD
https://gitee.com/qhxlh254/ipnknrorwa/issues/IE1IAH
https://gitee.com/hxumo057/okwzzjluzj/issues/IE1IAE
https://gitee.com/oxjqd444/gcyfwzcfms/issues/IE1IAF
https://gitee.com/qhxlh254/ipnknrorwa/issues/IE1IAC
https://gitee.com/hxumo057/okwzzjluzj/issues/IE1IA7
https://gitee.com/oxjqd444/gcyfwzcfms/issues/IE1IA6
https://gitee.com/ttxfi490/sleiepzefq/issues/IE1IA4
https://gitee.com/qhxlh254/ipnknrorwa/issues/IE1IA2
https://gitee.com/hxumo057/okwzzjluzj/issues/IE1IA1
https://gitee.com/oxjqd444/gcyfwzcfms/issues/IE1IA0
https://gitee.com/ttxfi490/sleiepzefq/issues/IE1I9Z
https://gitee.com/qhxlh254/ipnknrorwa/issues/IE1I9X
https://gitee.com/oxjqd444/gcyfwzcfms/issues/IE1I9U
https://gitee.com/ttxfi490/sleiepzefq/issues/IE1I9S
https://gitee.com/hxumo057/okwzzjluzj/issues/IE1I9R
https://gitee.com/qhxlh254/ipnknrorwa/issues/IE1I9N
https://gitee.com/oxjqd444/gcyfwzcfms/issues/IE1I9P
https://gitee.com/ttxfi490/sleiepzefq/issues/IE1I9I
https://gitee.com/hxumo057/okwzzjluzj/issues/IE1I9J
https://gitee.com/oxjqd444/gcyfwzcfms/issues/IE1I9F
https://gitee.com/qhxlh254/ipnknrorwa/issues/IE1I9E
https://gitee.com/hxumo057/okwzzjluzj/issues/IE1I9C
https://gitee.com/ttxfi490/sleiepzefq/issues/IE1I9B
https://gitee.com/qhxlh254/ipnknrorwa/issues/IE1I98
https://gitee.com/hxumo057/okwzzjluzj/issues/IE1I96
https://gitee.com/ttxfi490/sleiepzefq/issues/IE1I95
https://gitee.com/oxjqd444/gcyfwzcfms/issues/IE1I97
https://gitee.com/oxjqd444/gcyfwzcfms/issues/IE1I93
https://gitee.com/ttxfi490/sleiepzefq/issues/IE1I92
https://gitee.com/hxumo057/okwzzjluzj/issues/IE1I91
https://gitee.com/apqif803/fntwzjscpm/issues/IE1I61
https://gitee.com/apqif803/fntwzjscpm/issues/IE1I5X
https://gitee.com/apqif803/fntwzjscpm/issues/IE1I5T
https://gitee.com/apqif803/fntwzjscpm/issues/IE1I5Q
https://gitee.com/apqif803/fntwzjscpm/issues/IE1I5O
https://gitee.com/apqif803/fntwzjscpm/issues/IE1I5N
https://gitee.com/apqif803/fntwzjscpm/issues/IE1I5J
https://gitee.com/apqif803/fntwzjscpm/issues/IE1I5G
https://gitee.com/apqif803/fntwzjscpm/issues/IE1I5B
https://gitee.com/apqif803/fntwzjscpm/issues/IE1I56
https://gitee.com/apqif803/fntwzjscpm/issues/IE1I51
https://gitee.com/apqif803/fntwzjscpm/issues/IE1I4Y
https://gitee.com/qhxlh254/ipnknrorwa/issues/IE1I4F
https://gitee.com/oxjqd444/gcyfwzcfms/issues/IE1I49
https://gitee.com/hxumo057/okwzzjluzj/issues/IE1I45
https://gitee.com/qhxlh254/ipnknrorwa/issues/IE1I4A
https://gitee.com/ttxfi490/sleiepzefq/issues/IE1I46
https://gitee.com/qhxlh254/ipnknrorwa/issues/IE1I40
https://gitee.com/oxjqd444/gcyfwzcfms/issues/IE1I42
https://gitee.com/ttxfi490/sleiepzefq/issues/IE1I3X
https://gitee.com/hxumo057/okwzzjluzj/issues/IE1I3W
https://gitee.com/oxjqd444/gcyfwzcfms/issues/IE1I3S
https://gitee.com/ttxfi490/sleiepzefq/issues/IE1I3Q
https://gitee.com/hxumo057/okwzzjluzj/issues/IE1I3R
https://gitee.com/apqif803/fntwzjscpm/issues/IE1HZP
https://gitee.com/apqif803/fntwzjscpm/issues/IE1HZK
https://gitee.com/apqif803/fntwzjscpm/issues/IE1HZ6
https://gitee.com/qhxlh254/ipnknrorwa/issues/IE1HYX
https://gitee.com/hxumo057/okwzzjluzj/issues/IE1HYT
https://gitee.com/ttxfi490/sleiepzefq/issues/IE1HYS
https://gitee.com/oxjqd444/gcyfwzcfms/issues/IE1HYQ
https://gitee.com/qhxlh254/ipnknrorwa/issues/IE1HYO
https://gitee.com/apqif803/fntwzjscpm/issues/IE1HYK
https://gitee.com/oxjqd444/gcyfwzcfms/issues/IE1HYI
https://gitee.com/hxumo057/okwzzjluzj/issues/IE1HYG
https://gitee.com/ttxfi490/sleiepzefq/issues/IE1HYC
https://gitee.com/apqif803/fntwzjscpm/issues/IE1HYD
https://gitee.com/qhxlh254/ipnknrorwa/issues/IE1HY9
https://gitee.com/ttxfi490/sleiepzefq/issues/IE1HY7
https://gitee.com/apqif803/fntwzjscpm/issues/IE1HY6
https://gitee.com/oxjqd444/gcyfwzcfms/issues/IE1HY5
https://gitee.com/hxumo057/okwzzjluzj/issues/IE1HY4
https://gitee.com/ttxfi490/sleiepzefq/issues/IE1HY0
https://gitee.com/apqif803/fntwzjscpm/issues/IE1HXZ
https://gitee.com/oxjqd444/gcyfwzcfms/issues/IE1HXX
https://gitee.com/qhxlh254/ipnknrorwa/issues/IE1HXW
https://gitee.com/hxumo057/okwzzjluzj/issues/IE1HXU
https://gitee.com/qhxlh254/ipnknrorwa/issues/IE1HXS
https://gitee.com/apqif803/fntwzjscpm/issues/IE1HXQ
https://gitee.com/ttxfi490/sleiepzefq/issues/IE1HXR
https://gitee.com/oxjqd444/gcyfwzcfms/issues/IE1HXP
https://gitee.com/hxumo057/okwzzjluzj/issues/IE1HXO
https://gitee.com/wnpyz791/yfucwxebmk/issues/IE1HW0
https://gitee.com/wnpyz791/yfucwxebmk/issues/IE1HVW
https://gitee.com/ebrnu666/igecbexlpr/issues/IE1HVU
https://gitee.com/xbirw301/eaiabnkwyz/issues/IE1HVV
https://gitee.com/wnpyz791/yfucwxebmk/issues/IE1HVO
https://gitee.com/xbirw301/eaiabnkwyz/issues/IE1HVN
https://gitee.com/ebrnu666/igecbexlpr/issues/IE1HVM
https://gitee.com/klmfd716/bnrhecmwvl/issues/IE1HVL
https://gitee.com/wnpyz791/yfucwxebmk/issues/IE1HVI
https://gitee.com/ebrnu666/igecbexlpr/issues/IE1HVG
https://gitee.com/xbirw301/eaiabnkwyz/issues/IE1HVD
https://gitee.com/klmfd716/bnrhecmwvl/issues/IE1HVB
https://gitee.com/ebrnu666/igecbexlpr/issues/IE1HV7
https://gitee.com/wnpyz791/yfucwxebmk/issues/IE1HV5
https://gitee.com/klmfd716/bnrhecmwvl/issues/IE1HV3
https://gitee.com/xbirw301/eaiabnkwyz/issues/IE1HV1
https://gitee.com/ebrnu666/igecbexlpr/issues/IE1HV0
https://gitee.com/klmfd716/bnrhecmwvl/issues/IE1HUY
https://gitee.com/klmfd716/bnrhecmwvl/issues/IE1HUV
https://gitee.com/xbirw301/eaiabnkwyz/issues/IE1HUP
https://gitee.com/klmfd716/bnrhecmwvl/issues/IE1HUQ
https://gitee.com/itotz414/kvhfqadbcc/issues/IE1HUI
https://gitee.com/klmfd716/bnrhecmwvl/issues/IE1HUH
https://gitee.com/xbirw301/eaiabnkwyz/issues/IE1HUG
https://gitee.com/itotz414/kvhfqadbcc/issues/IE1HUA
https://gitee.com/xbirw301/eaiabnkwyz/issues/IE1HU7
https://gitee.com/klmfd716/bnrhecmwvl/issues/IE1HU8
https://gitee.com/itotz414/kvhfqadbcc/issues/IE1HU5
https://gitee.com/xbirw301/eaiabnkwyz/issues/IE1HU4
https://gitee.com/klmfd716/bnrhecmwvl/issues/IE1HU0
https://gitee.com/xbirw301/eaiabnkwyz/issues/IE1HTW
https://gitee.com/klmfd716/bnrhecmwvl/issues/IE1HTU
https://gitee.com/wnpyz791/yfucwxebmk/issues/IE1HTR
https://gitee.com/itotz414/kvhfqadbcc/issues/IE1HTQ
https://gitee.com/xbirw301/eaiabnkwyz/issues/IE1HTP
https://gitee.com/klmfd716/bnrhecmwvl/issues/IE1HTM
https://gitee.com/ebrnu666/igecbexlpr/issues/IE1HTL
https://gitee.com/xbirw301/eaiabnkwyz/issues/IE1HTK
https://gitee.com/itotz414/kvhfqadbcc/issues/IE1HTJ
https://gitee.com/klmfd716/bnrhecmwvl/issues/IE1HTI
https://gitee.com/klmfd716/bnrhecmwvl/issues/IE1HTB
https://gitee.com/itotz414/kvhfqadbcc/issues/IE1HT6
https://gitee.com/xbirw301/eaiabnkwyz/issues/IE1HT4
https://gitee.com/itotz414/kvhfqadbcc/issues/IE1HT1
https://gitee.com/klmfd716/bnrhecmwvl/issues/IE1HSZ
https://gitee.com/xbirw301/eaiabnkwyz/issues/IE1HSX
https://gitee.com/wnpyz791/yfucwxebmk/issues/IE1HSW
https://gitee.com/itotz414/kvhfqadbcc/issues/IE1HST
https://gitee.com/xbirw301/eaiabnkwyz/issues/IE1HSP
https://gitee.com/klmfd716/bnrhecmwvl/issues/IE1HSO
https://gitee.com/itotz414/kvhfqadbcc/issues/IE1HSM
https://gitee.com/wnpyz791/yfucwxebmk/issues/IE1HSL
https://gitee.com/ebrnu666/igecbexlpr/issues/IE1HSJ
https://gitee.com/itotz414/kvhfqadbcc/issues/IE1HSH
https://gitee.com/xbirw301/eaiabnkwyz/issues/IE1HSD
https://gitee.com/itotz414/kvhfqadbcc/issues/IE1HSC
https://gitee.com/wnpyz791/yfucwxebmk/issues/IE1HSB
https://gitee.com/ebrnu666/igecbexlpr/issues/IE1HS5
https://gitee.com/wnpyz791/yfucwxebmk/issues/IE1HS4
https://gitee.com/itotz414/kvhfqadbcc/issues/IE1HS1
https://gitee.com/xbirw301/eaiabnkwyz/issues/IE1HRY
https://gitee.com/klmfd716/bnrhecmwvl/issues/IE1HRX
https://gitee.com/wnpyz791/yfucwxebmk/issues/IE1HRR
https://gitee.com/itotz414/kvhfqadbcc/issues/IE1HRS
https://gitee.com/klmfd716/bnrhecmwvl/issues/IE1HRP
https://gitee.com/itotz414/kvhfqadbcc/issues/IE1HRO
https://gitee.com/wnpyz791/yfucwxebmk/issues/IE1HRL
https://gitee.com/itotz414/kvhfqadbcc/issues/IE1HRK
https://gitee.com/klmfd716/bnrhecmwvl/issues/IE1HRJ
https://gitee.com/wnpyz791/yfucwxebmk/issues/IE1HRG
https://gitee.com/ebrnu666/igecbexlpr/issues/IE1HRD
https://gitee.com/itotz414/kvhfqadbcc/issues/IE1HRE
https://gitee.com/itotz414/kvhfqadbcc/issues/IE1HRB
https://gitee.com/wnpyz791/yfucwxebmk/issues/IE1HRA
https://gitee.com/klmfd716/bnrhecmwvl/issues/IE1HR7
https://gitee.com/ebrnu666/igecbexlpr/issues/IE1HR8
https://gitee.com/wnpyz791/yfucwxebmk/issues/IE1HR4
https://gitee.com/ebrnu666/igecbexlpr/issues/IE1HQZ
https://gitee.com/xbirw301/eaiabnkwyz/issues/IE1HQS
https://gitee.com/wnpyz791/yfucwxebmk/issues/IE1HQU
https://gitee.com/ebrnu666/igecbexlpr/issues/IE1HQN
https://gitee.com/wnpyz791/yfucwxebmk/issues/IE1HQL
https://gitee.com/gjlet671/dbzjplllok/issues/IE1HQK
https://gitee.com/ebrnu666/igecbexlpr/issues/IE1HQJ
https://gitee.com/ebrnu666/igecbexlpr/issues/IE1HQG
https://gitee.com/gjlet671/dbzjplllok/issues/IE1HQE
https://gitee.com/jewph269/lsfjutqggd/issues/IE1HQB
https://gitee.com/ebrnu666/igecbexlpr/issues/IE1HQ8
https://gitee.com/gjlet671/dbzjplllok/issues/IE1HQ7
https://gitee.com/klmfd716/bnrhecmwvl/issues/IE1HQ2
https://gitee.com/jewph269/lsfjutqggd/issues/IE1HQ5
https://gitee.com/wnpyz791/yfucwxebmk/issues/IE1HQ0
https://gitee.com/ebrnu666/igecbexlpr/issues/IE1HPZ
https://gitee.com/mdkxp877/teycwhtcdr/issues/IE1HPW
https://gitee.com/jewph269/lsfjutqggd/issues/IE1HPT
https://gitee.com/mdkxp877/teycwhtcdr/issues/IE1HPP
https://gitee.com/ebrnu666/igecbexlpr/issues/IE1HPL
https://gitee.com/mdkxp877/teycwhtcdr/issues/IE1HPI
https://gitee.com/ebrnu666/igecbexlpr/issues/IE1HPF
https://gitee.com/jewph269/lsfjutqggd/issues/IE1HPE
https://gitee.com/mdkxp877/teycwhtcdr/issues/IE1HPC
https://gitee.com/wnpyz791/yfucwxebmk/issues/IE1HPA
https://gitee.com/jewph269/lsfjutqggd/issues/IE1HP9
https://gitee.com/xlmgy964/fdkudhepho/issues/IE1HP7
https://gitee.com/mdkxp877/teycwhtcdr/issues/IE1HP4
https://gitee.com/ebrnu666/igecbexlpr/issues/IE1HP5
https://gitee.com/ovkpl377/zcwuzrcnby/issues/IE1HP1
https://gitee.com/xlmgy964/fdkudhepho/issues/IE1HP0
https://gitee.com/ebrnu666/igecbexlpr/issues/IE1HOX
https://gitee.com/jewph269/lsfjutqggd/issues/IE1HOZ
https://gitee.com/xbirw301/eaiabnkwyz/issues/IE1HOW
https://gitee.com/mdkxp877/teycwhtcdr/issues/IE1HOU
https://gitee.com/ovkpl377/zcwuzrcnby/issues/IE1HOT
https://gitee.com/jewph269/lsfjutqggd/issues/IE1HON
https://gitee.com/xlmgy964/fdkudhepho/issues/IE1HOM
https://gitee.com/ovkpl377/zcwuzrcnby/issues/IE1HOL
https://gitee.com/xbirw301/eaiabnkwyz/issues/IE1HOK
https://gitee.com/xlmgy964/fdkudhepho/issues/IE1HOF
https://gitee.com/ovkpl377/zcwuzrcnby/issues/IE1HOC
https://gitee.com/xbirw301/eaiabnkwyz/issues/IE1HOD
https://gitee.com/mdkxp877/teycwhtcdr/issues/IE1HOA
https://gitee.com/jewph269/lsfjutqggd/issues/IE1HO9
https://gitee.com/ovkpl377/zcwuzrcnby/issues/IE1HO6
https://gitee.com/mdkxp877/teycwhtcdr/issues/IE1HO3
https://gitee.com/xlmgy964/fdkudhepho/issues/IE1HO5
https://gitee.com/cafks707/hxqmctknhr/issues/IE1HO0
https://gitee.com/mdkxp877/teycwhtcdr/issues/IE1HNZ
https://gitee.com/ovkpl377/zcwuzrcnby/issues/IE1HNY
https://gitee.com/cafks707/hxqmctknhr/issues/IE1HNQ
https://gitee.com/jewph269/lsfjutqggd/issues/IE1HNT
https://gitee.com/xlmgy964/fdkudhepho/issues/IE1HNS
https://gitee.com/itotz414/kvhfqadbcc/issues/IE1HNO
https://gitee.com/mdkxp877/teycwhtcdr/issues/IE1HNN
https://gitee.com/xlmgy964/fdkudhepho/issues/IE1HNM
https://gitee.com/cafks707/hxqmctknhr/issues/IE1HNL
https://gitee.com/ovkpl377/zcwuzrcnby/issues/IE1HNJ
https://gitee.com/mdkxp877/teycwhtcdr/issues/IE1HNH
https://gitee.com/xlmgy964/fdkudhepho/issues/IE1HNG
https://gitee.com/gjlet671/dbzjplllok/issues/IE1HNF
https://gitee.com/cafks707/hxqmctknhr/issues/IE1HNC
https://gitee.com/mdkxp877/teycwhtcdr/issues/IE1HN9
https://gitee.com/xlmgy964/fdkudhepho/issues/IE1HN8
https://gitee.com/gjlet671/dbzjplllok/issues/IE1HN1
https://gitee.com/ovkpl377/zcwuzrcnby/issues/IE1HN3
https://gitee.com/cafks707/hxqmctknhr/issues/IE1HN5
https://gitee.com/xlmgy964/fdkudhepho/issues/IE1HMZ
https://gitee.com/mdkxp877/teycwhtcdr/issues/IE1HMX
https://gitee.com/cafks707/hxqmctknhr/issues/IE1HMW
https://gitee.com/gjlet671/dbzjplllok/issues/IE1HMU
https://gitee.com/xlmgy964/fdkudhepho/issues/IE1HMT
https://gitee.com/mdkxp877/teycwhtcdr/issues/IE1HMS
https://gitee.com/jewph269/lsfjutqggd/issues/IE1HMP
https://gitee.com/cafks707/hxqmctknhr/issues/IE1HMO
https://gitee.com/ovkpl377/zcwuzrcnby/issues/IE1HMN
https://gitee.com/mdkxp877/teycwhtcdr/issues/IE1HML
https://gitee.com/jewph269/lsfjutqggd/issues/IE1HMI
https://gitee.com/cafks707/hxqmctknhr/issues/IE1HMF
https://gitee.com/jewph269/lsfjutqggd/issues/IE1HMC
https://gitee.com/mdkxp877/teycwhtcdr/issues/IE1HMB
https://gitee.com/gjlet671/dbzjplllok/issues/IE1HM9
https://gitee.com/cafks707/hxqmctknhr/issues/IE1HM8
https://gitee.com/mdkxp877/teycwhtcdr/issues/IE1HM5
https://gitee.com/ovkpl377/zcwuzrcnby/issues/IE1HM4
https://gitee.com/gjlet671/dbzjplllok/issues/IE1HM2
https://gitee.com/jewph269/lsfjutqggd/issues/IE1HM0
https://gitee.com/gjlet671/dbzjplllok/issues/IE1HLX
https://gitee.com/mdkxp877/teycwhtcdr/issues/IE1HLW
https://gitee.com/ovkpl377/zcwuzrcnby/issues/IE1HLU
https://gitee.com/jewph269/lsfjutqggd/issues/IE1HLP
https://gitee.com/cafks707/hxqmctknhr/issues/IE1HLQ
https://gitee.com/xlmgy964/fdkudhepho/issues/IE1HLO
https://gitee.com/gjlet671/dbzjplllok/issues/IE1HLM
https://gitee.com/ovkpl377/zcwuzrcnby/issues/IE1HLL
https://gitee.com/cafks707/hxqmctknhr/issues/IE1HLJ
https://gitee.com/jewph269/lsfjutqggd/issues/IE1HLI
https://gitee.com/mdkxp877/teycwhtcdr/issues/IE1HLH
https://gitee.com/wnpyz791/yfucwxebmk/issues/IE1HLG
https://gitee.com/xlmgy964/fdkudhepho/issues/IE1HLE
https://gitee.com/cafks707/hxqmctknhr/issues/IE1HLD
https://gitee.com/rjnhv649/coufwgxbmj/issues/IE1HLC
https://gitee.com/mdkxp877/teycwhtcdr/issues/IE1HLA
https://gitee.com/xlmgy964/fdkudhepho/issues/IE1HL6
https://gitee.com/gjlet671/dbzjplllok/issues/IE1HL2
https://gitee.com/rjnhv649/coufwgxbmj/issues/IE1HL4
https://gitee.com/cafks707/hxqmctknhr/issues/IE1HL1
https://gitee.com/rjnhv649/coufwgxbmj/issues/IE1HL0
https://gitee.com/gbfud882/mwpmqadnxb/issues/IE1HKX
https://gitee.com/owlgv956/hqlgtduksp/issues/IE1HKW
https://gitee.com/jewph269/lsfjutqggd/issues/IE1HKU
https://gitee.com/cafks707/hxqmctknhr/issues/IE1HKV
https://gitee.com/gjlet671/dbzjplllok/issues/IE1HKT
https://gitee.com/gbfud882/mwpmqadnxb/issues/IE1HKQ
https://gitee.com/owlgv956/hqlgtduksp/issues/IE1HKM
https://gitee.com/jewph269/lsfjutqggd/issues/IE1HKK
https://gitee.com/xlmgy964/fdkudhepho/issues/IE1HKL
https://gitee.com/gbfud882/mwpmqadnxb/issues/IE1HKI
https://gitee.com/xlmgy964/fdkudhepho/issues/IE1HKF
https://gitee.com/cafks707/hxqmctknhr/issues/IE1HKE
https://gitee.com/jewph269/lsfjutqggd/issues/IE1HKB
https://gitee.com/gjlet671/dbzjplllok/issues/IE1HKA
https://gitee.com/xlmgy964/fdkudhepho/issues/IE1HKC
https://gitee.com/owlgv956/hqlgtduksp/issues/IE1HK8
https://gitee.com/gbfud882/mwpmqadnxb/issues/IE1HK9
https://gitee.com/xlmgy964/fdkudhepho/issues/IE1HK4
https://gitee.com/gjlet671/dbzjplllok/issues/IE1HK3
https://gitee.com/owlgv956/hqlgtduksp/issues/IE1HK1
https://gitee.com/cafks707/hxqmctknhr/issues/IE1HJZ
https://gitee.com/gjlet671/dbzjplllok/issues/IE1HJY
https://gitee.com/jewph269/lsfjutqggd/issues/IE1HJW
https://gitee.com/xlmgy964/fdkudhepho/issues/IE1HJU
https://gitee.com/itotz414/kvhfqadbcc/issues/IE1HJR
https://gitee.com/rjnhv649/coufwgxbmj/issues/IE1HJV
https://gitee.com/owlgv956/hqlgtduksp/issues/IE1HJT
https://gitee.com/cafks707/hxqmctknhr/issues/IE1HJS
https://gitee.com/gbfud882/mwpmqadnxb/issues/IE1HJP
https://gitee.com/rjnhv649/coufwgxbmj/issues/IE1HJN
https://gitee.com/cafks707/hxqmctknhr/issues/IE1HJM
https://gitee.com/jewph269/lsfjutqggd/issues/IE1HJL
https://gitee.com/xlmgy964/fdkudhepho/issues/IE1HJK
https://gitee.com/gjlet671/dbzjplllok/issues/IE1HJJ
https://gitee.com/rjnhv649/coufwgxbmj/issues/IE1HJH
https://gitee.com/cafks707/hxqmctknhr/issues/IE1HJ9
https://gitee.com/owlgv956/hqlgtduksp/issues/IE1HJE
https://gitee.com/gjlet671/dbzjplllok/issues/IE1HJC
https://gitee.com/rjnhv649/coufwgxbmj/issues/IE1HJ5
https://gitee.com/itotz414/kvhfqadbcc/issues/IE1HJ3
https://gitee.com/cafks707/hxqmctknhr/issues/IE1HJ2
https://gitee.com/fjumw224/dnqekeexdq/issues/IE1HJ0
https://gitee.com/gbfud882/mwpmqadnxb/issues/IE1HIV
https://gitee.com/rjnhv649/coufwgxbmj/issues/IE1HIZ
https://gitee.com/gjlet671/dbzjplllok/issues/IE1HIW
https://gitee.com/ovkpl377/zcwuzrcnby/issues/IE1HIX
https://gitee.com/owlgv956/hqlgtduksp/issues/IE1HIS
https://gitee.com/fjumw224/dnqekeexdq/issues/IE1HIP
https://gitee.com/rjnhv649/coufwgxbmj/issues/IE1HIN
https://gitee.com/ovkpl377/zcwuzrcnby/issues/IE1HIL
https://gitee.com/qqwda293/xteifbrwuh/issues/IE1HII
https://gitee.com/fjumw224/dnqekeexdq/issues/IE1HIJ
https://gitee.com/guzdl467/xhinhwzxod/issues/IE1HIH
https://gitee.com/rjnhv649/coufwgxbmj/issues/IE1HIG
https://gitee.com/gjlet671/dbzjplllok/issues/IE1HIF
https://gitee.com/owlgv956/hqlgtduksp/issues/IE1HIE
https://gitee.com/fjumw224/dnqekeexdq/issues/IE1HID
https://gitee.com/ovkpl377/zcwuzrcnby/issues/IE1HIB
https://gitee.com/gjlet671/dbzjplllok/issues/IE1HIA
https://gitee.com/gbfud882/mwpmqadnxb/issues/IE1HI3
https://gitee.com/rjnhv649/coufwgxbmj/issues/IE1HI5
https://gitee.com/bxhgr118/dxwheptkwg/issues/IE1HHW
https://gitee.com/rjnhv649/coufwgxbmj/issues/IE1HHT
https://gitee.com/ovkpl377/zcwuzrcnby/issues/IE1HHR
https://gitee.com/viucw356/xecmwtqzsj/issues/IE1HHP
https://gitee.com/owlgv956/hqlgtduksp/issues/IE1HHQ
https://gitee.com/qqwda293/xteifbrwuh/issues/IE1HHM
https://gitee.com/ovkpl377/zcwuzrcnby/issues/IE1HHK
https://gitee.com/bxhgr118/dxwheptkwg/issues/IE1HHI
https://gitee.com/owlgv956/hqlgtduksp/issues/IE1HHG
https://gitee.com/ovkpl377/zcwuzrcnby/issues/IE1HHF
https://gitee.com/qqwda293/xteifbrwuh/issues/IE1HHA
https://gitee.com/owlgv956/hqlgtduksp/issues/IE1HHC
https://gitee.com/pspip068/ppcztclipk/issues/IE1HH9
https://gitee.com/bxhgr118/dxwheptkwg/issues/IE1HH8
https://gitee.com/gbfud882/mwpmqadnxb/issues/IE1HH5
https://gitee.com/ovkpl377/zcwuzrcnby/issues/IE1HH4
https://gitee.com/pspip068/ppcztclipk/issues/IE1HH2
https://gitee.com/bxhgr118/dxwheptkwg/issues/IE1HH1
https://gitee.com/gbfud882/mwpmqadnxb/issues/IE1HGW
https://gitee.com/ovkpl377/zcwuzrcnby/issues/IE1HGX
https://gitee.com/guzdl467/xhinhwzxod/issues/IE1HGT
https://gitee.com/pspip068/ppcztclipk/issues/IE1HGU
https://gitee.com/fjumw224/dnqekeexdq/issues/IE1HGQ
https://gitee.com/gbfud882/mwpmqadnxb/issues/IE1HGN
https://gitee.com/pspip068/ppcztclipk/issues/IE1HGL
https://gitee.com/fjumw224/dnqekeexdq/issues/IE1HGK
https://gitee.com/guzdl467/xhinhwzxod/issues/IE1HGI
https://gitee.com/grrhx144/seljtdtkxh/issues/IE1HGH
https://gitee.com/fjumw224/dnqekeexdq/issues/IE1HGG
https://gitee.com/guzdl467/xhinhwzxod/issues/IE1HGF
https://gitee.com/gbfud882/mwpmqadnxb/issues/IE1HGE
https://gitee.com/qqwda293/xteifbrwuh/issues/IE1HGC
https://gitee.com/grrhx144/seljtdtkxh/issues/IE1HG9
https://gitee.com/gbfud882/mwpmqadnxb/issues/IE1HG8
https://gitee.com/qqwda293/xteifbrwuh/issues/IE1HG7
https://gitee.com/guzdl467/xhinhwzxod/issues/IE1HG5
https://gitee.com/gbfud882/mwpmqadnxb/issues/IE1HG4
https://gitee.com/grrhx144/seljtdtkxh/issues/IE1HG3
https://gitee.com/guzdl467/xhinhwzxod/issues/IE1HG2
https://gitee.com/fjumw224/dnqekeexdq/issues/IE1HG1
https://gitee.com/qqwda293/xteifbrwuh/issues/IE1HFZ
https://gitee.com/grrhx144/seljtdtkxh/issues/IE1HFW
https://gitee.com/bxhgr118/dxwheptkwg/issues/IE1HFX
https://gitee.com/rjnhv649/coufwgxbmj/issues/IE1HFU
https://gitee.com/guzdl467/xhinhwzxod/issues/IE1HFV
https://gitee.com/qqwda293/xteifbrwuh/issues/IE1HFS
https://gitee.com/fjumw224/dnqekeexdq/issues/IE1HFR
https://gitee.com/qqwda293/xteifbrwuh/issues/IE1HFP
https://gitee.com/fjumw224/dnqekeexdq/issues/IE1HFO
https://gitee.com/rjnhv649/coufwgxbmj/issues/IE1HFM
https://gitee.com/grrhx144/seljtdtkxh/issues/IE1HFL
https://gitee.com/owlgv956/hqlgtduksp/issues/IE1HFI
https://gitee.com/bxhgr118/dxwheptkwg/issues/IE1HFH
https://gitee.com/qqwda293/xteifbrwuh/issues/IE1HFG
https://gitee.com/rjnhv649/coufwgxbmj/issues/IE1HFF
https://gitee.com/owlgv956/hqlgtduksp/issues/IE1HFC
https://gitee.com/fjumw224/dnqekeexdq/issues/IE1HFB
https://gitee.com/bxhgr118/dxwheptkwg/issues/IE1HFA
https://gitee.com/qqwda293/xteifbrwuh/issues/IE1HF8
https://gitee.com/grrhx144/seljtdtkxh/issues/IE1HF9
https://gitee.com/fjumw224/dnqekeexdq/issues/IE1HF6
https://gitee.com/owlgv956/hqlgtduksp/issues/IE1HF5
https://gitee.com/fjumw224/dnqekeexdq/issues/IE1HF1
https://gitee.com/rjnhv649/coufwgxbmj/issues/IE1HEZ
https://gitee.com/guzdl467/xhinhwzxod/issues/IE1HEY
https://gitee.com/grrhx144/seljtdtkxh/issues/IE1HEV
https://gitee.com/bxhgr118/dxwheptkwg/issues/IE1HET
https://gitee.com/qqwda293/xteifbrwuh/issues/IE1HEP
https://gitee.com/rjnhv649/coufwgxbmj/issues/IE1HES
https://gitee.com/guzdl467/xhinhwzxod/issues/IE1HER
https://gitee.com/bxhgr118/dxwheptkwg/issues/IE1HEN
https://gitee.com/fjumw224/dnqekeexdq/issues/IE1HEL
https://gitee.com/guzdl467/xhinhwzxod/issues/IE1HEM
https://gitee.com/rjnhv649/coufwgxbmj/issues/IE1HEK
https://gitee.com/grrhx144/seljtdtkxh/issues/IE1HEH
https://gitee.com/bxhgr118/dxwheptkwg/issues/IE1HEG
https://gitee.com/fjumw224/dnqekeexdq/issues/IE1HEC
https://gitee.com/grrhx144/seljtdtkxh/issues/IE1HEA
https://gitee.com/rjnhv649/coufwgxbmj/issues/IE1HE8
https://gitee.com/owlgv956/hqlgtduksp/issues/IE1HE6
https://gitee.com/grrhx144/seljtdtkxh/issues/IE1HE5
https://gitee.com/fjumw224/dnqekeexdq/issues/IE1HE4
https://gitee.com/rjnhv649/coufwgxbmj/issues/IE1HE2
https://gitee.com/gbfud882/mwpmqadnxb/issues/IE1HE3
https://gitee.com/owlgv956/hqlgtduksp/issues/IE1HE1
https://gitee.com/viucw356/xecmwtqzsj/issues/IE1HDZ
https://gitee.com/qqwda293/xteifbrwuh/issues/IE1HDY
https://gitee.com/gbfud882/mwpmqadnxb/issues/IE1HDS
https://gitee.com/owlgv956/hqlgtduksp/issues/IE1HDQ
https://gitee.com/pnsbr590/ckgaxzppjd/issues/IE1HDL
https://gitee.com/gbfud882/mwpmqadnxb/issues/IE1HDM
https://gitee.com/qqwda293/xteifbrwuh/issues/IE1HDJ
https://gitee.com/viucw356/xecmwtqzsj/issues/IE1HDG
https://gitee.com/pnsbr590/ckgaxzppjd/issues/IE1HDC
https://gitee.com/qqwda293/xteifbrwuh/issues/IE1HDB
https://gitee.com/owlgv956/hqlgtduksp/issues/IE1HDA
https://gitee.com/pnsbr590/ckgaxzppjd/issues/IE1HD6
https://gitee.com/qqwda293/xteifbrwuh/issues/IE1HD5
https://gitee.com/owlgv956/hqlgtduksp/issues/IE1HD4
https://gitee.com/pnsbr590/ckgaxzppjd/issues/IE1HD3
https://gitee.com/gbfud882/mwpmqadnxb/issues/IE1HD2
https://gitee.com/owlgv956/hqlgtduksp/issues/IE1HCZ
https://gitee.com/qqwda293/xteifbrwuh/issues/IE1HCY
https://gitee.com/gbfud882/mwpmqadnxb/issues/IE1HCX
https://gitee.com/pnsbr590/ckgaxzppjd/issues/IE1HCT
https://gitee.com/fjumw224/dnqekeexdq/issues/IE1HCR
https://gitee.com/grrhx144/seljtdtkxh/issues/IE1HCN
https://gitee.com/qqwda293/xteifbrwuh/issues/IE1HCM
https://gitee.com/gbfud882/mwpmqadnxb/issues/IE1HCL
https://gitee.com/viucw356/xecmwtqzsj/issues/IE1HCE
https://gitee.com/guzdl467/xhinhwzxod/issues/IE1HCG
https://gitee.com/qqwda293/xteifbrwuh/issues/IE1HCD
https://gitee.com/bxhgr118/dxwheptkwg/issues/IE1HCC
https://gitee.com/guzdl467/xhinhwzxod/issues/IE1HCB
https://gitee.com/pspip068/ppcztclipk/issues/IE1HC6
https://gitee.com/fjumw224/dnqekeexdq/issues/IE1HC8
https://gitee.com/pnsbr590/ckgaxzppjd/issues/IE1HC9
https://gitee.com/uhnhs185/erzrulbqgx/issues/IE1HC7
https://gitee.com/gbfud882/mwpmqadnxb/issues/IE1HC5
https://gitee.com/pnsbr590/ckgaxzppjd/issues/IE1HC3
https://gitee.com/guzdl467/xhinhwzxod/issues/IE1HC2
https://gitee.com/uhnhs185/erzrulbqgx/issues/IE1HC0
https://gitee.com/pspip068/ppcztclipk/issues/IE1HBZ
https://gitee.com/fjumw224/dnqekeexdq/issues/IE1HBY
https://gitee.com/grrhx144/seljtdtkxh/issues/IE1HBU
https://gitee.com/pnsbr590/ckgaxzppjd/issues/IE1HBT
https://gitee.com/uhnhs185/erzrulbqgx/issues/IE1HBQ
https://gitee.com/bxhgr118/dxwheptkwg/issues/IE1HBO
https://gitee.com/pspip068/ppcztclipk/issues/IE1HBP
https://gitee.com/pnsbr590/ckgaxzppjd/issues/IE1HBM
https://gitee.com/vuxlf214/uujctdmjed/issues/IE1HBL
https://gitee.com/qqwda293/xteifbrwuh/issues/IE1HBK
https://gitee.com/uhnhs185/erzrulbqgx/issues/IE1HBH
https://gitee.com/viucw356/xecmwtqzsj/issues/IE1HBG
https://gitee.com/vuxlf214/uujctdmjed/issues/IE1HBF
网硕互联帮助中心



评论前必须登录!
注册