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/keolf491/pqyxqublpg/issues/IDYH6Y
https://gitee.com/vubfe524/kzqjgdfcud/issues/IDYH70
https://gitee.com/mhtpe669/usyoczhngt/issues/IDYH72
https://gitee.com/qbvne232/hxjzvlypzk/issues/IDYH71
https://gitee.com/cqmul129/anfcgxhekj/issues/IDYH6Z
https://gitee.com/qbvne232/hxjzvlypzk/issues/IDYH6X
https://gitee.com/mhtpe669/usyoczhngt/issues/IDYH6W
https://gitee.com/cqmul129/anfcgxhekj/issues/IDYH6V
https://gitee.com/vubfe524/kzqjgdfcud/issues/IDYH6U
https://gitee.com/mhtpe669/usyoczhngt/issues/IDYH6T
https://gitee.com/mhtpe669/usyoczhngt/issues/IDYH6S
https://gitee.com/cqmul129/anfcgxhekj/issues/IDYH6R
https://gitee.com/mhtpe669/usyoczhngt/issues/IDYH6Q
https://gitee.com/cqmul129/anfcgxhekj/issues/IDYH6P
https://gitee.com/xgfet991/fclvhlwaal/issues/IDYH6O
https://gitee.com/xgfet991/fclvhlwaal/issues/IDYH6N
https://gitee.com/xgfet991/fclvhlwaal/issues/IDYH6M
https://gitee.com/krmwe244/lszcrdarcn/issues/IDYH6L
https://gitee.com/prqfv897/zanjnkwabl/issues/IDYH6K
https://gitee.com/xgfet991/fclvhlwaal/issues/IDYH6J
https://gitee.com/xpknb943/hijihfolsp/issues/IDYH6H
https://gitee.com/krmwe244/lszcrdarcn/issues/IDYH6I
https://gitee.com/xpknb943/hijihfolsp/issues/IDYH6F
https://gitee.com/krmwe244/lszcrdarcn/issues/IDYH6G
https://gitee.com/xgfet991/fclvhlwaal/issues/IDYH6E
https://gitee.com/krmwe244/lszcrdarcn/issues/IDYH6D
https://gitee.com/krmwe244/lszcrdarcn/issues/IDYH6C
https://gitee.com/dkwob452/gzuaoyyifw/issues/IDYH6B
https://gitee.com/xpknb943/hijihfolsp/issues/IDYH6A
https://gitee.com/krmwe244/lszcrdarcn/issues/IDYH69
https://gitee.com/prqfv897/zanjnkwabl/issues/IDYH67
https://gitee.com/xgfet991/fclvhlwaal/issues/IDYH68
https://gitee.com/igvqg939/emsduyoejt/issues/IDYH66
https://gitee.com/dkwob452/gzuaoyyifw/issues/IDYH65
https://gitee.com/mhtpe669/usyoczhngt/issues/IDYH63
https://gitee.com/krmwe244/lszcrdarcn/issues/IDYH64
https://gitee.com/xpknb943/hijihfolsp/issues/IDYH62
https://gitee.com/ekeeg856/ivbflqtjjb/issues/IDYH60
https://gitee.com/prqfv897/zanjnkwabl/issues/IDYH61
https://gitee.com/igvqg939/emsduyoejt/issues/IDYH5Z
https://gitee.com/xgfet991/fclvhlwaal/issues/IDYH5Y
https://gitee.com/vvshe788/rxkpnqamzn/issues/IDYH5W
https://gitee.com/krmwe244/lszcrdarcn/issues/IDYH5X
https://gitee.com/xpknb943/hijihfolsp/issues/IDYH5V
https://gitee.com/dkwob452/gzuaoyyifw/issues/IDYH5T
https://gitee.com/prqfv897/zanjnkwabl/issues/IDYH5U
https://gitee.com/krmwe244/lszcrdarcn/issues/IDYH5S
https://gitee.com/ekeeg856/ivbflqtjjb/issues/IDYH5R
https://gitee.com/igvqg939/emsduyoejt/issues/IDYH5Q
https://gitee.com/xpknb943/hijihfolsp/issues/IDYH5P
https://gitee.com/prqfv897/zanjnkwabl/issues/IDYH5O
https://gitee.com/krmwe244/lszcrdarcn/issues/IDYH5N
https://gitee.com/ekeeg856/ivbflqtjjb/issues/IDYH5K
https://gitee.com/xgfet991/fclvhlwaal/issues/IDYH5M
https://gitee.com/igvqg939/emsduyoejt/issues/IDYH5L
https://gitee.com/vvshe788/rxkpnqamzn/issues/IDYH5I
https://gitee.com/xpknb943/hijihfolsp/issues/IDYH5J
https://gitee.com/dkwob452/gzuaoyyifw/issues/IDYH5G
https://gitee.com/prqfv897/zanjnkwabl/issues/IDYH5H
https://gitee.com/krmwe244/lszcrdarcn/issues/IDYH5F
https://gitee.com/igvqg939/emsduyoejt/issues/IDYH5E
https://gitee.com/prqfv897/zanjnkwabl/issues/IDYH5D
https://gitee.com/prqfv897/zanjnkwabl/issues/IDYH5C
https://gitee.com/xpknb943/hijihfolsp/issues/IDYH5B
https://gitee.com/igvqg939/emsduyoejt/issues/IDYH5A
https://gitee.com/ekeeg856/ivbflqtjjb/issues/IDYH59
https://gitee.com/prqfv897/zanjnkwabl/issues/IDYH56
https://gitee.com/ekeeg856/ivbflqtjjb/issues/IDYH57
https://gitee.com/xpknb943/hijihfolsp/issues/IDYH58
https://gitee.com/dkwob452/gzuaoyyifw/issues/IDYH55
https://gitee.com/xgfet991/fclvhlwaal/issues/IDYH54
https://gitee.com/ekeeg856/ivbflqtjjb/issues/IDYH53
https://gitee.com/prqfv897/zanjnkwabl/issues/IDYH52
https://gitee.com/igvqg939/emsduyoejt/issues/IDYH51
https://gitee.com/mhtpe669/usyoczhngt/issues/IDYH50
https://gitee.com/ekeeg856/ivbflqtjjb/issues/IDYH4Z
https://gitee.com/ekeeg856/ivbflqtjjb/issues/IDYH4X
https://gitee.com/prqfv897/zanjnkwabl/issues/IDYH4W
https://gitee.com/igvqg939/emsduyoejt/issues/IDYH4Y
https://gitee.com/ekeeg856/ivbflqtjjb/issues/IDYH4V
https://gitee.com/dkwob452/gzuaoyyifw/issues/IDYH4U
https://gitee.com/vvshe788/rxkpnqamzn/issues/IDYH4T
https://gitee.com/dkwob452/gzuaoyyifw/issues/IDYH4S
https://gitee.com/dkwob452/gzuaoyyifw/issues/IDYH4R
https://gitee.com/ekeeg856/ivbflqtjjb/issues/IDYH4Q
https://gitee.com/wcikz373/qhvjgruysq/issues/IDYH4P
https://gitee.com/xgfet991/fclvhlwaal/issues/IDYH4L
https://gitee.com/wcikz373/qhvjgruysq/issues/IDYH4O
https://gitee.com/dkwob452/gzuaoyyifw/issues/IDYH4N
https://gitee.com/ekeeg856/ivbflqtjjb/issues/IDYH4M
https://gitee.com/wuxdu063/luizqgqtnk/issues/IDYH4J
https://gitee.com/wcikz373/qhvjgruysq/issues/IDYH4K
https://gitee.com/dkwob452/gzuaoyyifw/issues/IDYH4H
https://gitee.com/prqfv897/zanjnkwabl/issues/IDYH4I
https://gitee.com/vvshe788/rxkpnqamzn/issues/IDYH4G
https://gitee.com/wcikz373/qhvjgruysq/issues/IDYH4F
https://gitee.com/dkwob452/gzuaoyyifw/issues/IDYH4E
https://gitee.com/ekeeg856/ivbflqtjjb/issues/IDYH4D
https://gitee.com/wuxdu063/luizqgqtnk/issues/IDYH4C
https://gitee.com/wcikz373/qhvjgruysq/issues/IDYH4B
https://gitee.com/dkwob452/gzuaoyyifw/issues/IDYH4A
https://gitee.com/vvshe788/rxkpnqamzn/issues/IDYH48
https://gitee.com/yzvwi105/kyylctxtwn/issues/IDYH49
https://gitee.com/wuxdu063/luizqgqtnk/issues/IDYH47
https://gitee.com/xpknb943/hijihfolsp/issues/IDYH46
https://gitee.com/dkwob452/gzuaoyyifw/issues/IDYH45
https://gitee.com/prqfv897/zanjnkwabl/issues/IDYH43
https://gitee.com/wuxdu063/luizqgqtnk/issues/IDYH44
https://gitee.com/yzvwi105/kyylctxtwn/issues/IDYH42
https://gitee.com/dkwob452/gzuaoyyifw/issues/IDYH41
https://gitee.com/wuxdu063/luizqgqtnk/issues/IDYH40
https://gitee.com/vvshe788/rxkpnqamzn/issues/IDYH3Z
https://gitee.com/wuxdu063/luizqgqtnk/issues/IDYH3Y
https://gitee.com/ekeeg856/ivbflqtjjb/issues/IDYH3W
https://gitee.com/xpknb943/hijihfolsp/issues/IDYH3X
https://gitee.com/wuxdu063/luizqgqtnk/issues/IDYH3V
https://gitee.com/vvshe788/rxkpnqamzn/issues/IDYH3U
https://gitee.com/dkwob452/gzuaoyyifw/issues/IDYH3T
https://gitee.com/vvshe788/rxkpnqamzn/issues/IDYH3S
https://gitee.com/dkwob452/gzuaoyyifw/issues/IDYH3R
https://gitee.com/prqfv897/zanjnkwabl/issues/IDYH3Q
https://gitee.com/ekeeg856/ivbflqtjjb/issues/IDYH3O
https://gitee.com/dkwob452/gzuaoyyifw/issues/IDYH3P
https://gitee.com/vvshe788/rxkpnqamzn/issues/IDYH3N
https://gitee.com/vvshe788/rxkpnqamzn/issues/IDYH3M
https://gitee.com/prqfv897/zanjnkwabl/issues/IDYH3L
https://gitee.com/vvshe788/rxkpnqamzn/issues/IDYH3K
https://gitee.com/xpknb943/hijihfolsp/issues/IDYH3J
https://gitee.com/ekeeg856/ivbflqtjjb/issues/IDYH3G
https://gitee.com/dkwob452/gzuaoyyifw/issues/IDYH3I
https://gitee.com/prqfv897/zanjnkwabl/issues/IDYH3H
https://gitee.com/vvshe788/rxkpnqamzn/issues/IDYH3F
https://gitee.com/dkwob452/gzuaoyyifw/issues/IDYH3E
https://gitee.com/xpknb943/hijihfolsp/issues/IDYH3D
https://gitee.com/prqfv897/zanjnkwabl/issues/IDYH3C
https://gitee.com/vvshe788/rxkpnqamzn/issues/IDYH3B
https://gitee.com/prqfv897/zanjnkwabl/issues/IDYH3A
https://gitee.com/xpknb943/hijihfolsp/issues/IDYH39
https://gitee.com/vvshe788/rxkpnqamzn/issues/IDYH38
https://gitee.com/wuxdu063/luizqgqtnk/issues/IDYH37
https://gitee.com/yzvwi105/kyylctxtwn/issues/IDYH35
https://gitee.com/prqfv897/zanjnkwabl/issues/IDYH36
https://gitee.com/ekeeg856/ivbflqtjjb/issues/IDYH34
https://gitee.com/yzvwi105/kyylctxtwn/issues/IDYH33
https://gitee.com/wuxdu063/luizqgqtnk/issues/IDYH32
https://gitee.com/ekeeg856/ivbflqtjjb/issues/IDYH31
https://gitee.com/wuxdu063/luizqgqtnk/issues/IDYH30
https://gitee.com/yzvwi105/kyylctxtwn/issues/IDYH2Z
https://gitee.com/yzvwi105/kyylctxtwn/issues/IDYH2Y
https://gitee.com/wuxdu063/luizqgqtnk/issues/IDYH2X
https://gitee.com/dezon161/ctoglwpbph/issues/IDYH2W
https://gitee.com/xpknb943/hijihfolsp/issues/IDYH2T
https://gitee.com/yzvwi105/kyylctxtwn/issues/IDYH2U
https://gitee.com/vvshe788/rxkpnqamzn/issues/IDYH2V
https://gitee.com/wuxdu063/luizqgqtnk/issues/IDYH2S
https://gitee.com/dezon161/ctoglwpbph/issues/IDYH2R
https://gitee.com/yzvwi105/kyylctxtwn/issues/IDYH2Q
https://gitee.com/xgfet991/fclvhlwaal/issues/IDYH2P
https://gitee.com/wuxdu063/luizqgqtnk/issues/IDYH2O
https://gitee.com/wcikz373/qhvjgruysq/issues/IDYH2N
https://gitee.com/dezon161/ctoglwpbph/issues/IDYH2M
https://gitee.com/xgfet991/fclvhlwaal/issues/IDYH2L
https://gitee.com/xpknb943/hijihfolsp/issues/IDYH2K
https://gitee.com/cozbo537/mysqnqcttq/issues/IDYH2J
https://gitee.com/vvshe788/rxkpnqamzn/issues/IDYH2H
https://gitee.com/wuxdu063/luizqgqtnk/issues/IDYH2I
https://gitee.com/dezon161/ctoglwpbph/issues/IDYH2G
https://gitee.com/yzvwi105/kyylctxtwn/issues/IDYH2F
https://gitee.com/cozbo537/mysqnqcttq/issues/IDYH2E
https://gitee.com/xgfet991/fclvhlwaal/issues/IDYH2D
https://gitee.com/wuxdu063/luizqgqtnk/issues/IDYH2C
https://gitee.com/yzvwi105/kyylctxtwn/issues/IDYH2B
https://gitee.com/xpknb943/hijihfolsp/issues/IDYH2A
https://gitee.com/mruqf709/swptkzkbvx/issues/IDYH27
https://gitee.com/wuxdu063/luizqgqtnk/issues/IDYH28
https://gitee.com/xgfet991/fclvhlwaal/issues/IDYH29
https://gitee.com/yzvwi105/kyylctxtwn/issues/IDYH26
https://gitee.com/xgfet991/fclvhlwaal/issues/IDYH25
https://gitee.com/xpknb943/hijihfolsp/issues/IDYH24
https://gitee.com/mruqf709/swptkzkbvx/issues/IDYH23
https://gitee.com/wuxdu063/luizqgqtnk/issues/IDYH22
https://gitee.com/xgfet991/fclvhlwaal/issues/IDYH21
https://gitee.com/cozbo537/mysqnqcttq/issues/IDYH1Y
https://gitee.com/xpknb943/hijihfolsp/issues/IDYH20
https://gitee.com/yzvwi105/kyylctxtwn/issues/IDYH1Z
https://gitee.com/dezon161/ctoglwpbph/issues/IDYH1V
https://gitee.com/wuxdu063/luizqgqtnk/issues/IDYH1X
https://gitee.com/vvshe788/rxkpnqamzn/issues/IDYH1W
https://gitee.com/yzvwi105/kyylctxtwn/issues/IDYH1U
https://gitee.com/wuxdu063/luizqgqtnk/issues/IDYH1T
https://gitee.com/xgfet991/fclvhlwaal/issues/IDYH1S
https://gitee.com/yzvwi105/kyylctxtwn/issues/IDYH1R
https://gitee.com/xgfet991/fclvhlwaal/issues/IDYH1Q
https://gitee.com/yzvwi105/kyylctxtwn/issues/IDYH1P
https://gitee.com/rkwmj028/qvomeiasrj/issues/IDYH1O
https://gitee.com/dezon161/ctoglwpbph/issues/IDYH1M
https://gitee.com/xgfet991/fclvhlwaal/issues/IDYH1N
https://gitee.com/yzvwi105/kyylctxtwn/issues/IDYH1L
https://gitee.com/rkwmj028/qvomeiasrj/issues/IDYH1K
https://gitee.com/yzvwi105/kyylctxtwn/issues/IDYH1J
https://gitee.com/rkwmj028/qvomeiasrj/issues/IDYH1I
https://gitee.com/rdnai193/vvculbegtq/issues/IDYH1H
https://gitee.com/vvshe788/rxkpnqamzn/issues/IDYH1G
https://gitee.com/uhxmi402/drrkojgpmd/issues/IDYH1E
https://gitee.com/vvshe788/rxkpnqamzn/issues/IDYH1F
https://gitee.com/dezon161/ctoglwpbph/issues/IDYH1D
https://gitee.com/rdnai193/vvculbegtq/issues/IDYH1C
https://gitee.com/cozbo537/mysqnqcttq/issues/IDYH19
https://gitee.com/mruqf709/swptkzkbvx/issues/IDYH1B
https://gitee.com/rkwmj028/qvomeiasrj/issues/IDYH1A
https://gitee.com/rljff657/mzmrchfrqs/issues/IDYH18
https://gitee.com/mruqf709/swptkzkbvx/issues/IDYH17
https://gitee.com/yzvwi105/kyylctxtwn/issues/IDYH16
https://gitee.com/rkwmj028/qvomeiasrj/issues/IDYH15
https://gitee.com/dezon161/ctoglwpbph/issues/IDYH14
https://gitee.com/mruqf709/swptkzkbvx/issues/IDYH13
https://gitee.com/yzvwi105/kyylctxtwn/issues/IDYH12
https://gitee.com/rkwmj028/qvomeiasrj/issues/IDYH11
https://gitee.com/dezon161/ctoglwpbph/issues/IDYH0Z
https://gitee.com/mruqf709/swptkzkbvx/issues/IDYH0Y
https://gitee.com/uhxmi402/drrkojgpmd/issues/IDYH0X
https://gitee.com/mruqf709/swptkzkbvx/issues/IDYH0W
https://gitee.com/mruqf709/swptkzkbvx/issues/IDYH0V
https://gitee.com/wcikz373/qhvjgruysq/issues/IDYH0U
https://gitee.com/mruqf709/swptkzkbvx/issues/IDYH0T
https://gitee.com/rljff657/mzmrchfrqs/issues/IDYH0R
https://gitee.com/dezon161/ctoglwpbph/issues/IDYH0S
https://gitee.com/tgiqv746/oxhytylvps/issues/IDYH0Q
https://gitee.com/cozbo537/mysqnqcttq/issues/IDYH0O
https://gitee.com/dezon161/ctoglwpbph/issues/IDYH0P
https://gitee.com/tgiqv746/oxhytylvps/issues/IDYH0N
https://gitee.com/mruqf709/swptkzkbvx/issues/IDYH0M
https://gitee.com/dezon161/ctoglwpbph/issues/IDYH0L
https://gitee.com/rdnai193/vvculbegtq/issues/IDYH0K
https://gitee.com/mruqf709/swptkzkbvx/issues/IDYH0I
https://gitee.com/tgiqv746/oxhytylvps/issues/IDYH0J
https://gitee.com/rljff657/mzmrchfrqs/issues/IDYH0H
https://gitee.com/rdnai193/vvculbegtq/issues/IDYH0G
https://gitee.com/wcikz373/qhvjgruysq/issues/IDYH0E
https://gitee.com/tgiqv746/oxhytylvps/issues/IDYH0F
https://gitee.com/rdnai193/vvculbegtq/issues/IDYH0D
https://gitee.com/tgiqv746/oxhytylvps/issues/IDYH0C
https://gitee.com/mruqf709/swptkzkbvx/issues/IDYH0B
https://gitee.com/uhxmi402/drrkojgpmd/issues/IDYH0A
https://gitee.com/rkwmj028/qvomeiasrj/issues/IDYH09
https://gitee.com/rdnai193/vvculbegtq/issues/IDYH08
https://gitee.com/uhxmi402/drrkojgpmd/issues/IDYH07
https://gitee.com/mruqf709/swptkzkbvx/issues/IDYH06
https://gitee.com/uhxmi402/drrkojgpmd/issues/IDYH05
https://gitee.com/rkwmj028/qvomeiasrj/issues/IDYH04
https://gitee.com/rdnai193/vvculbegtq/issues/IDYH03
https://gitee.com/rkwmj028/qvomeiasrj/issues/IDYH02
https://gitee.com/mruqf709/swptkzkbvx/issues/IDYH01
https://gitee.com/uhxmi402/drrkojgpmd/issues/IDYH00
https://gitee.com/rdnai193/vvculbegtq/issues/IDYGZZ
https://gitee.com/rljff657/mzmrchfrqs/issues/IDYGZY
https://gitee.com/rkwmj028/qvomeiasrj/issues/IDYGZX
https://gitee.com/rljff657/mzmrchfrqs/issues/IDYGZW
https://gitee.com/rkwmj028/qvomeiasrj/issues/IDYGZV
https://gitee.com/rkwmj028/qvomeiasrj/issues/IDYGZU
https://gitee.com/rljff657/mzmrchfrqs/issues/IDYGZT
https://gitee.com/dsdvx328/nmtqueujfy/issues/IDYGZS
https://gitee.com/mruqf709/swptkzkbvx/issues/IDYGZR
https://gitee.com/rkwmj028/qvomeiasrj/issues/IDYGZQ
https://gitee.com/rdnai193/vvculbegtq/issues/IDYGZP
https://gitee.com/tgiqv746/oxhytylvps/issues/IDYGZN
https://gitee.com/dsdvx328/nmtqueujfy/issues/IDYGZO
https://gitee.com/rkwmj028/qvomeiasrj/issues/IDYGZM
https://gitee.com/rdnai193/vvculbegtq/issues/IDYGZK
https://gitee.com/uhxmi402/drrkojgpmd/issues/IDYGZL
https://gitee.com/cozbo537/mysqnqcttq/issues/IDYGZJ
https://gitee.com/rkwmj028/qvomeiasrj/issues/IDYGZI
https://gitee.com/dsdvx328/nmtqueujfy/issues/IDYGZH
https://gitee.com/wcikz373/qhvjgruysq/issues/IDYGZG
https://gitee.com/rljff657/mzmrchfrqs/issues/IDYGZE
https://gitee.com/rdnai193/vvculbegtq/issues/IDYGZF
https://gitee.com/cozbo537/mysqnqcttq/issues/IDYGZD
https://gitee.com/tgiqv746/oxhytylvps/issues/IDYGZB
https://gitee.com/mruqf709/swptkzkbvx/issues/IDYGZC
https://gitee.com/dsdvx328/nmtqueujfy/issues/IDYGZ9
https://gitee.com/rkwmj028/qvomeiasrj/issues/IDYGZA
https://gitee.com/wcikz373/qhvjgruysq/issues/IDYGZ8
https://gitee.com/cozbo537/mysqnqcttq/issues/IDYGZ7
https://gitee.com/rkwmj028/qvomeiasrj/issues/IDYGZ6
https://gitee.com/mruqf709/swptkzkbvx/issues/IDYGZ5
https://gitee.com/rljff657/mzmrchfrqs/issues/IDYGZ4
https://gitee.com/wcikz373/qhvjgruysq/issues/IDYGZ3
https://gitee.com/uhxmi402/drrkojgpmd/issues/IDYGZ2
https://gitee.com/rdnai193/vvculbegtq/issues/IDYGZ1
https://gitee.com/rkwmj028/qvomeiasrj/issues/IDYGZ0
https://gitee.com/rdnai193/vvculbegtq/issues/IDYGYZ
https://gitee.com/tgiqv746/oxhytylvps/issues/IDYGYX
https://gitee.com/rdnai193/vvculbegtq/issues/IDYGYY
https://gitee.com/rljff657/mzmrchfrqs/issues/IDYGYW
https://gitee.com/rdnai193/vvculbegtq/issues/IDYGYV
https://gitee.com/wcikz373/qhvjgruysq/issues/IDYGYU
https://gitee.com/wcikz373/qhvjgruysq/issues/IDYGYT
https://gitee.com/rdnai193/vvculbegtq/issues/IDYGYR
https://gitee.com/rljff657/mzmrchfrqs/issues/IDYGYS
https://gitee.com/wcikz373/qhvjgruysq/issues/IDYGYQ
https://gitee.com/dsdvx328/nmtqueujfy/issues/IDYGYP
https://gitee.com/rljff657/mzmrchfrqs/issues/IDYGYO
https://gitee.com/cozbo537/mysqnqcttq/issues/IDYGYN
https://gitee.com/rdnai193/vvculbegtq/issues/IDYGYM
https://gitee.com/cozbo537/mysqnqcttq/issues/IDYGYL
https://gitee.com/rljff657/mzmrchfrqs/issues/IDYGYK
https://gitee.com/dsdvx328/nmtqueujfy/issues/IDYGYJ
https://gitee.com/cozbo537/mysqnqcttq/issues/IDYGYH
https://gitee.com/dsdvx328/nmtqueujfy/issues/IDYGYI
https://gitee.com/rljff657/mzmrchfrqs/issues/IDYGYG
https://gitee.com/rdnai193/vvculbegtq/issues/IDYGYF
https://gitee.com/dsdvx328/nmtqueujfy/issues/IDYGYE
https://gitee.com/rljff657/mzmrchfrqs/issues/IDYGYD
https://gitee.com/cozbo537/mysqnqcttq/issues/IDYGYC
https://gitee.com/wcikz373/qhvjgruysq/issues/IDYGYB
https://gitee.com/rdnai193/vvculbegtq/issues/IDYGY9
https://gitee.com/dezon161/ctoglwpbph/issues/IDYGYA
https://gitee.com/rljff657/mzmrchfrqs/issues/IDYGY8
https://gitee.com/cozbo537/mysqnqcttq/issues/IDYGY7
https://gitee.com/wcikz373/qhvjgruysq/issues/IDYGY6
https://gitee.com/dsdvx328/nmtqueujfy/issues/IDYGY5
https://gitee.com/dezon161/ctoglwpbph/issues/IDYGY4
https://gitee.com/cozbo537/mysqnqcttq/issues/IDYGY2
https://gitee.com/rljff657/mzmrchfrqs/issues/IDYGY3
https://gitee.com/wcikz373/qhvjgruysq/issues/IDYGY1
https://gitee.com/dezon161/ctoglwpbph/issues/IDYGY0
https://gitee.com/tgiqv746/oxhytylvps/issues/IDYGXZ
https://gitee.com/uhxmi402/drrkojgpmd/issues/IDYGXX
https://gitee.com/dsdvx328/nmtqueujfy/issues/IDYGXY
https://gitee.com/rljff657/mzmrchfrqs/issues/IDYGXW
https://gitee.com/dezon161/ctoglwpbph/issues/IDYGXV
https://gitee.com/dsdvx328/nmtqueujfy/issues/IDYGXU
https://gitee.com/tgiqv746/oxhytylvps/issues/IDYGXT
https://gitee.com/wcikz373/qhvjgruysq/issues/IDYGXR
https://gitee.com/uhxmi402/drrkojgpmd/issues/IDYGXS
https://gitee.com/rljff657/mzmrchfrqs/issues/IDYGXP
https://gitee.com/dezon161/ctoglwpbph/issues/IDYGXQ
https://gitee.com/rkwmj028/qvomeiasrj/issues/IDYGXO
https://gitee.com/uhxmi402/drrkojgpmd/issues/IDYGXN
https://gitee.com/dezon161/ctoglwpbph/issues/IDYGXM
https://gitee.com/rkwmj028/qvomeiasrj/issues/IDYGXL
https://gitee.com/rljff657/mzmrchfrqs/issues/IDYGXK
https://gitee.com/tgiqv746/oxhytylvps/issues/IDYGXJ
https://gitee.com/dsdvx328/nmtqueujfy/issues/IDYGXI
https://gitee.com/wcikz373/qhvjgruysq/issues/IDYGXH
https://gitee.com/dezon161/ctoglwpbph/issues/IDYGXG
https://gitee.com/rljff657/mzmrchfrqs/issues/IDYGXF
https://gitee.com/dsdvx328/nmtqueujfy/issues/IDYGXE
https://gitee.com/dezon161/ctoglwpbph/issues/IDYGXD
https://gitee.com/uhxmi402/drrkojgpmd/issues/IDYGXC
https://gitee.com/dsdvx328/nmtqueujfy/issues/IDYGXB
https://gitee.com/tgiqv746/oxhytylvps/issues/IDYGXA
https://gitee.com/uhxmi402/drrkojgpmd/issues/IDYGX8
https://gitee.com/tgiqv746/oxhytylvps/issues/IDYGX9
https://gitee.com/dsdvx328/nmtqueujfy/issues/IDYGX7
https://gitee.com/tgiqv746/oxhytylvps/issues/IDYGX6
https://gitee.com/uhxmi402/drrkojgpmd/issues/IDYGX5
https://gitee.com/dsdvx328/nmtqueujfy/issues/IDYGX4
https://gitee.com/dsdvx328/nmtqueujfy/issues/IDYGX3
https://gitee.com/tgiqv746/oxhytylvps/issues/IDYGX2
https://gitee.com/tgiqv746/oxhytylvps/issues/IDYGX1
https://gitee.com/uhxmi402/drrkojgpmd/issues/IDYGX0
https://gitee.com/uhxmi402/drrkojgpmd/issues/IDYGWY
https://gitee.com/dsdvx328/nmtqueujfy/issues/IDYGWX
https://gitee.com/tgiqv746/oxhytylvps/issues/IDYGWW
https://gitee.com/mruqf709/swptkzkbvx/issues/IDYGWV
https://gitee.com/cozbo537/mysqnqcttq/issues/IDYGWU
https://gitee.com/uhxmi402/drrkojgpmd/issues/IDYGWT
https://gitee.com/dsdvx328/nmtqueujfy/issues/IDYGWS
https://gitee.com/mruqf709/swptkzkbvx/issues/IDYGWR
https://gitee.com/cozbo537/mysqnqcttq/issues/IDYGWQ
https://gitee.com/tgiqv746/oxhytylvps/issues/IDYGWP
https://gitee.com/uhxmi402/drrkojgpmd/issues/IDYGWO
https://gitee.com/cozbo537/mysqnqcttq/issues/IDYGWN
https://gitee.com/uhxmi402/drrkojgpmd/issues/IDYGWM
https://gitee.com/tgiqv746/oxhytylvps/issues/IDYGWL
https://gitee.com/cozbo537/mysqnqcttq/issues/IDYGWK
https://gitee.com/cozbo537/mysqnqcttq/issues/IDYGWJ
https://gitee.com/sbvgz989/jzjnvzkvta/issues/IDYGWC
https://gitee.com/dsdvx328/nmtqueujfy/issues/IDYGW7
https://gitee.com/cqmul129/anfcgxhekj/issues/IDYGW5
https://gitee.com/yzvwi105/kyylctxtwn/issues/IDYGW2
https://gitee.com/keolf491/pqyxqublpg/issues/IDYGW3
https://gitee.com/vvshe788/rxkpnqamzn/issues/IDYGW0
https://gitee.com/dkwob452/gzuaoyyifw/issues/IDYGVZ
https://gitee.com/xpknb943/hijihfolsp/issues/IDYGVY
https://gitee.com/vubfe524/kzqjgdfcud/issues/IDYGVW
https://gitee.com/wuxdu063/luizqgqtnk/issues/IDYGVU
https://gitee.com/krmwe244/lszcrdarcn/issues/IDYGVT
https://gitee.com/igvqg939/emsduyoejt/issues/IDYGVS
https://gitee.com/mhtpe669/usyoczhngt/issues/IDYGVR
https://gitee.com/prqfv897/zanjnkwabl/issues/IDYGVQ
https://gitee.com/ekeeg856/ivbflqtjjb/issues/IDYGVP
https://gitee.com/xgfet991/fclvhlwaal/issues/IDYGVN
https://gitee.com/mruqf709/swptkzkbvx/issues/IDYGVK
https://gitee.com/uhxmi402/drrkojgpmd/issues/IDYGVJ
https://gitee.com/cozbo537/mysqnqcttq/issues/IDYGVI
https://gitee.com/tgiqv746/oxhytylvps/issues/IDYGVH
https://gitee.com/wcikz373/qhvjgruysq/issues/IDYGVF
https://gitee.com/rdnai193/vvculbegtq/issues/IDYGTL
网硕互联帮助中心




评论前必须登录!
注册