欢迎光临
我们一直在努力

使用PyQt5创建现代化的桌面应用程序

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/benny045685/bennasd/issues/IH4NHN https://gitee.com/benny045685/bennasd/issues/IH4NHO https://gitee.com/benny045685/bennasd/issues/IH4NHM https://gitee.com/benny045685/bennasd/issues/IH4NHH https://gitee.com/benny045685/bennasd/issues/IH4NHL https://gitee.com/benny045685/bennasd/issues/IH4NHK https://gitee.com/jia-xusheng/asdsadas/issues/IH4NHB https://gitee.com/benny045685/bennasd/issues/IH4NHG https://gitee.com/jia-xusheng/asdsadas/issues/IH4NHC https://gitee.com/jia-xusheng/asdsadas/issues/IH4NHE https://gitee.com/jia-xusheng/asdsadas/issues/IH4NHD https://gitee.com/benny045685/bennasd/issues/IH4NH9 https://gitee.com/jia-xusheng/asdsadas/issues/IH4NHA https://gitee.com/jia-xusheng/asdsadas/issues/IH4NH7 https://gitee.com/benny045685/bennasd/issues/IH4NH5 https://gitee.com/jia-xusheng/asdsadas/issues/IH4NGR https://gitee.com/benny045685/bennasd/issues/IH4NGY https://gitee.com/jia-xusheng/asdsadas/issues/IH4NGZ https://gitee.com/jia-xusheng/asdsadas/issues/IH4NH0 https://gitee.com/jia-xusheng/asdsadas/issues/IH4NGW https://gitee.com/benny045685/bennasd/issues/IH4NGX https://gitee.com/jia-xusheng/asdsadas/issues/IH4NGU https://gitee.com/benny045685/bennasd/issues/IH4NGV https://gitee.com/benny045685/bennasd/issues/IH4NGQ https://gitee.com/benny045685/bennasd/issues/IH4NGT https://gitee.com/jia-xusheng/asdsadas/issues/IH4NG7 https://gitee.com/benny045685/bennasd/issues/IH4NGF https://gitee.com/benny045685/bennasd/issues/IH4NGD https://gitee.com/benny045685/bennasd/issues/IH4NGH https://gitee.com/benny045685/bennasd/issues/IH4NGC https://gitee.com/benny045685/bennasd/issues/IH4NGB https://gitee.com/benny045685/bennasd/issues/IH4NGE https://gitee.com/benny045685/bennasd/issues/IH4NGA https://gitee.com/benny045685/bennasd/issues/IH4NG9 https://gitee.com/benny045685/bennasd/issues/IH4NG8 https://gitee.com/benny045685/bennasd/issues/IH4NFZ https://gitee.com/benny045685/bennasd/issues/IH4NFS https://gitee.com/jia-xusheng/asdsadas/issues/IH4NFW https://gitee.com/benny045685/bennasd/issues/IH4NFV https://gitee.com/benny045685/bennasd/issues/IH4NG1 https://gitee.com/jia-xusheng/asdsadas/issues/IH4NG0 https://gitee.com/benny045685/bennasd/issues/IH4NFX https://gitee.com/jia-xusheng/asdsadas/issues/IH4NFY https://gitee.com/jia-xusheng/asdsadas/issues/IH4NFU https://gitee.com/benny045685/bennasd/issues/IH4NFT https://gitee.com/benny045685/bennasd/issues/IH4NFP https://gitee.com/jia-xusheng/asdsadas/issues/IH4NFO https://gitee.com/jia-xusheng/asdsadas/issues/IH4NFN https://gitee.com/benny045685/bennasd/issues/IH4NFM https://gitee.com/benny045685/bennasd/issues/IH4NFL https://gitee.com/jia-xusheng/asdsadas/issues/IH4NFJ https://gitee.com/benny045685/bennasd/issues/IH4NFK https://gitee.com/benny045685/bennasd/issues/IH4NFH https://gitee.com/benny045685/bennasd/issues/IH4NFG https://gitee.com/benny045685/bennasd/issues/IH4NFI https://gitee.com/jia-xusheng/asdsadas/issues/IH4NF5 https://gitee.com/benny045685/bennasd/issues/IH4NF7 https://gitee.com/jia-xusheng/asdsadas/issues/IH4NFB https://gitee.com/benny045685/bennasd/issues/IH4NF4 https://gitee.com/benny045685/bennasd/issues/IH4NF9 https://gitee.com/jia-xusheng/asdsadas/issues/IH4NF1 https://gitee.com/jia-xusheng/asdsadas/issues/IH4NFA https://gitee.com/benny045685/bennasd/issues/IH4NF0 https://gitee.com/jia-xusheng/asdsadas/issues/IH4NF6 https://gitee.com/benny045685/bennasd/issues/IH4NEY https://gitee.com/jia-xusheng/asdsadas/issues/IH4NEW https://gitee.com/benny045685/bennasd/issues/IH4NEO https://gitee.com/jia-xusheng/asdsadas/issues/IH4NEP https://gitee.com/benny045685/bennasd/issues/IH4NEM https://gitee.com/benny045685/bennasd/issues/IH4NEK https://gitee.com/benny045685/bennasd/issues/IH4NEL https://gitee.com/benny045685/bennasd/issues/IH4NEJ https://gitee.com/benny045685/bennasd/issues/IH4NEI https://gitee.com/jia-xusheng/asdsadas/issues/IH4NEH https://gitee.com/benny045685/bennasd/issues/IH4NEF https://gitee.com/benny045685/bennasd/issues/IH4NED https://gitee.com/jia-xusheng/asdsadas/issues/IH4NE5 https://gitee.com/jia-xusheng/asdsadas/issues/IH4NE7 https://gitee.com/benny045685/bennasd/issues/IH4NEC https://gitee.com/jia-xusheng/asdsadas/issues/IH4NE2 https://gitee.com/benny045685/bennasd/issues/IH4NE1 https://gitee.com/jia-xusheng/asdsadas/issues/IH4NE8 https://gitee.com/benny045685/bennasd/issues/IH4NE4 https://gitee.com/jia-xusheng/asdsadas/issues/IH4NE6 https://gitee.com/jia-xusheng/asdsadas/issues/IH4NDZ https://gitee.com/jia-xusheng/asdsadas/issues/IH4NDY https://gitee.com/jia-xusheng/asdsadas/issues/IH4NE0 https://gitee.com/jia-xusheng/asdsadas/issues/IH4NDW https://gitee.com/jia-xusheng/asdsadas/issues/IH4NDU https://gitee.com/benny045685/bennasd/issues/IH4NDT https://gitee.com/benny045685/bennasd/issues/IH4NDV https://gitee.com/benny045685/bennasd/issues/IH4NDR https://gitee.com/jia-xusheng/asdsadas/issues/IH4NDP https://gitee.com/benny045685/bennasd/issues/IH4NDO https://gitee.com/jia-xusheng/asdsadas/issues/IH4NDM https://gitee.com/jia-xusheng/asdsadas/issues/IH4NDK https://gitee.com/jia-xusheng/asdsadas/issues/IH4NDL https://gitee.com/jia-xusheng/asdsadas/issues/IH4NDJ https://gitee.com/benny045685/bennasd/issues/IH4NDI https://gitee.com/jia-xusheng/asdsadas/issues/IH4NDG https://gitee.com/benny045685/bennasd/issues/IH4NDF https://gitee.com/benny045685/bennasd/issues/IH4NDE https://gitee.com/jia-xusheng/asdsadas/issues/IH4NDD https://gitee.com/benny045685/bennasd/issues/IH4NDB https://gitee.com/benny045685/bennasd/issues/IH4NDA https://gitee.com/jia-xusheng/asdsadas/issues/IH4ND7 https://gitee.com/benny045685/bennasd/issues/IH4ND6 https://gitee.com/benny045685/bennasd/issues/IH4ND4 https://gitee.com/benny045685/bennasd/issues/IH4ND2 https://gitee.com/jia-xusheng/asdsadas/issues/IH4ND1 https://gitee.com/benny045685/bennasd/issues/IH4NCY https://gitee.com/benny045685/bennasd/issues/IH4ND0 https://gitee.com/jia-xusheng/asdsadas/issues/IH4NCZ https://gitee.com/jia-xusheng/asdsadas/issues/IH4NCW https://gitee.com/jia-xusheng/asdsadas/issues/IH4NCX https://gitee.com/benny045685/bennasd/issues/IH4NCV https://gitee.com/benny045685/bennasd/issues/IH4NCU https://gitee.com/jia-xusheng/asdsadas/issues/IH4NCT https://gitee.com/jia-xusheng/asdsadas/issues/IH4NCO https://gitee.com/benny045685/bennasd/issues/IH4NCP https://gitee.com/jia-xusheng/asdsadas/issues/IH4NCF https://gitee.com/benny045685/bennasd/issues/IH4NCI https://gitee.com/benny045685/bennasd/issues/IH4NCH https://gitee.com/benny045685/bennasd/issues/IH4NCD https://gitee.com/benny045685/bennasd/issues/IH4NCE https://gitee.com/jia-xusheng/asdsadas/issues/IH4NCC https://gitee.com/benny045685/bennasd/issues/IH4NC9 https://gitee.com/benny045685/bennasd/issues/IH4NC8 https://gitee.com/jia-xusheng/asdsadas/issues/IH4NC5 https://gitee.com/jia-xusheng/asdsadas/issues/IH4NC7 https://gitee.com/benny045685/bennasd/issues/IH4NC4 https://gitee.com/benny045685/bennasd/issues/IH4NC3 https://gitee.com/benny045685/bennasd/issues/IH4NC0 https://gitee.com/benny045685/bennasd/issues/IH4NBY https://gitee.com/jia-xusheng/asdsadas/issues/IH4NBX https://gitee.com/benny045685/bennasd/issues/IH4NBW https://gitee.com/jia-xusheng/asdsadas/issues/IH4NBV https://gitee.com/benny045685/bennasd/issues/IH4NBU https://gitee.com/benny045685/bennasd/issues/IH4NBT https://gitee.com/benny045685/bennasd/issues/IH4NBS https://gitee.com/benny045685/bennasd/issues/IH4NBQ https://gitee.com/benny045685/bennasd/issues/IH4NBR https://gitee.com/benny045685/bennasd/issues/IH4NBM https://gitee.com/benny045685/bennasd/issues/IH4NBI https://gitee.com/benny045685/bennasd/issues/IH4NBK https://gitee.com/jia-xusheng/asdsadas/issues/IH4NBL https://gitee.com/jia-xusheng/asdsadas/issues/IH4NBJ https://gitee.com/benny045685/bennasd/issues/IH4NBH https://gitee.com/benny045685/bennasd/issues/IH4NBE https://gitee.com/jia-xusheng/asdsadas/issues/IH4NBG https://gitee.com/jia-xusheng/asdsadas/issues/IH4NBF https://gitee.com/benny045685/bennasd/issues/IH4NBD https://gitee.com/jia-xusheng/asdsadas/issues/IH4NB9 https://gitee.com/jia-xusheng/asdsadas/issues/IH4NB8 https://gitee.com/jia-xusheng/asdsadas/issues/IH4NB7 https://gitee.com/jia-xusheng/asdsadas/issues/IH4NB6 https://gitee.com/benny045685/bennasd/issues/IH4NB5 https://gitee.com/benny045685/bennasd/issues/IH4NB3 https://gitee.com/benny045685/bennasd/issues/IH4NB2 https://gitee.com/benny045685/bennasd/issues/IH4NB1 https://gitee.com/jia-xusheng/asdsadas/issues/IH4NB0 https://gitee.com/jia-xusheng/asdsadas/issues/IH4NAY https://gitee.com/jia-xusheng/asdsadas/issues/IH4NAV https://gitee.com/jia-xusheng/asdsadas/issues/IH4NAQ https://gitee.com/jia-xusheng/asdsadas/issues/IH4NAU https://gitee.com/jia-xusheng/asdsadas/issues/IH4NAT https://gitee.com/benny045685/bennasd/issues/IH4NAR https://gitee.com/jia-xusheng/asdsadas/issues/IH4NAS https://gitee.com/jia-xusheng/asdsadas/issues/IH4NAL https://gitee.com/jia-xusheng/asdsadas/issues/IH4NAN https://gitee.com/benny045685/bennasd/issues/IH4NAM https://gitee.com/benny045685/bennasd/issues/IH4NAJ https://gitee.com/jia-xusheng/asdsadas/issues/IH4NAI https://gitee.com/jia-xusheng/asdsadas/issues/IH4NAH https://gitee.com/jia-xusheng/asdsadas/issues/IH4NAE https://gitee.com/benny045685/bennasd/issues/IH4NAG https://gitee.com/benny045685/bennasd/issues/IH4NAC https://gitee.com/benny045685/bennasd/issues/IH4NAB https://gitee.com/jia-xusheng/asdsadas/issues/IH4NAD https://gitee.com/jia-xusheng/asdsadas/issues/IH4NA8 https://gitee.com/jia-xusheng/asdsadas/issues/IH4NA6 https://gitee.com/benny045685/bennasd/issues/IH4NA9 https://gitee.com/benny045685/bennasd/issues/IH4N9R https://gitee.com/jia-xusheng/asdsadas/issues/IH4N9O https://gitee.com/benny045685/bennasd/issues/IH4N9N https://gitee.com/jia-xusheng/asdsadas/issues/IH4NA0 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N9P https://gitee.com/benny045685/bennasd/issues/IH4N9Y https://gitee.com/benny045685/bennasd/issues/IH4NA5 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N9Z https://gitee.com/jia-xusheng/asdsadas/issues/IH4N9S https://gitee.com/jia-xusheng/asdsadas/issues/IH4N9T https://gitee.com/jia-xusheng/asdsadas/issues/IH4N9L https://gitee.com/jia-xusheng/asdsadas/issues/IH4N9H https://gitee.com/jia-xusheng/asdsadas/issues/IH4N9J https://gitee.com/benny045685/bennasd/issues/IH4N9K https://gitee.com/jia-xusheng/asdsadas/issues/IH4N9I https://gitee.com/benny045685/bennasd/issues/IH4N9G https://gitee.com/benny045685/bennasd/issues/IH4N9F https://gitee.com/benny045685/bennasd/issues/IH4N9E https://gitee.com/jia-xusheng/asdsadas/issues/IH4N99 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N9D https://gitee.com/benny045685/bennasd/issues/IH4N9B https://gitee.com/jia-xusheng/asdsadas/issues/IH4N8X https://gitee.com/benny045685/bennasd/issues/IH4N8Z https://gitee.com/benny045685/bennasd/issues/IH4N8V https://gitee.com/benny045685/bennasd/issues/IH4N94 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N93 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N8W https://gitee.com/jia-xusheng/asdsadas/issues/IH4N92 https://gitee.com/benny045685/bennasd/issues/IH4N8S https://gitee.com/jia-xusheng/asdsadas/issues/IH4N8U https://gitee.com/jia-xusheng/asdsadas/issues/IH4N95 https://gitee.com/benny045685/bennasd/issues/IH4N8O https://gitee.com/jia-xusheng/asdsadas/issues/IH4N8N https://gitee.com/benny045685/bennasd/issues/IH4N8L https://gitee.com/benny045685/bennasd/issues/IH4N8G https://gitee.com/jia-xusheng/asdsadas/issues/IH4N8M https://gitee.com/jia-xusheng/asdsadas/issues/IH4N8J https://gitee.com/jia-xusheng/asdsadas/issues/IH4N8I https://gitee.com/benny045685/bennasd/issues/IH4N8H https://gitee.com/benny045685/bennasd/issues/IH4N8F https://gitee.com/benny045685/bennasd/issues/IH4N8E https://gitee.com/benny045685/bennasd/issues/IH4N8C https://gitee.com/jia-xusheng/asdsadas/issues/IH4N8D https://gitee.com/jia-xusheng/asdsadas/issues/IH4N8A https://gitee.com/jia-xusheng/asdsadas/issues/IH4N89 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N88 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N87 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N85 https://gitee.com/benny045685/bennasd/issues/IH4N86 https://gitee.com/benny045685/bennasd/issues/IH4N84 https://gitee.com/benny045685/bennasd/issues/IH4N83 https://gitee.com/benny045685/bennasd/issues/IH4N7Y https://gitee.com/benny045685/bennasd/issues/IH4N7X https://gitee.com/benny045685/bennasd/issues/IH4N7W https://gitee.com/jia-xusheng/asdsadas/issues/IH4N7S https://gitee.com/jia-xusheng/asdsadas/issues/IH4N7U https://gitee.com/benny045685/bennasd/issues/IH4N7T https://gitee.com/jia-xusheng/asdsadas/issues/IH4N7R https://gitee.com/jia-xusheng/asdsadas/issues/IH4N7Q https://gitee.com/jia-xusheng/asdsadas/issues/IH4N7P https://gitee.com/benny045685/bennasd/issues/IH4N7N https://gitee.com/jia-xusheng/asdsadas/issues/IH4N7F https://gitee.com/benny045685/bennasd/issues/IH4N7C https://gitee.com/benny045685/bennasd/issues/IH4N7E https://gitee.com/jia-xusheng/asdsadas/issues/IH4N7B https://gitee.com/benny045685/bennasd/issues/IH4N7A https://gitee.com/jia-xusheng/asdsadas/issues/IH4N79 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N75 https://gitee.com/benny045685/bennasd/issues/IH4N78 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N77 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N76 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N73 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N71 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N70 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N6Z https://gitee.com/benny045685/bennasd/issues/IH4N6X https://gitee.com/jia-xusheng/asdsadas/issues/IH4N6W https://gitee.com/benny045685/bennasd/issues/IH4N6V https://gitee.com/jia-xusheng/asdsadas/issues/IH4N6U https://gitee.com/jia-xusheng/asdsadas/issues/IH4N6T https://gitee.com/jia-xusheng/asdsadas/issues/IH4N6S https://gitee.com/benny045685/bennasd/issues/IH4N6P https://gitee.com/jia-xusheng/asdsadas/issues/IH4N6N https://gitee.com/benny045685/bennasd/issues/IH4N6O https://gitee.com/benny045685/bennasd/issues/IH4N6L https://gitee.com/benny045685/bennasd/issues/IH4N6K https://gitee.com/jia-xusheng/asdsadas/issues/IH4N6I https://gitee.com/benny045685/bennasd/issues/IH4N6H https://gitee.com/jia-xusheng/asdsadas/issues/IH4N6G https://gitee.com/jia-xusheng/asdsadas/issues/IH4N6F https://gitee.com/jia-xusheng/asdsadas/issues/IH4N6D https://gitee.com/benny045685/bennasd/issues/IH4N6A https://gitee.com/jia-xusheng/asdsadas/issues/IH4N6B https://gitee.com/benny045685/bennasd/issues/IH4N68 https://gitee.com/benny045685/bennasd/issues/IH4N69 https://gitee.com/benny045685/bennasd/issues/IH4N67 https://gitee.com/benny045685/bennasd/issues/IH4N65 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N63 https://gitee.com/benny045685/bennasd/issues/IH4N62 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N61 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N5Z https://gitee.com/benny045685/bennasd/issues/IH4N5Y https://gitee.com/jia-xusheng/asdsadas/issues/IH4N5W https://gitee.com/benny045685/bennasd/issues/IH4N5R https://gitee.com/benny045685/bennasd/issues/IH4N5Q https://gitee.com/jia-xusheng/asdsadas/issues/IH4N5T https://gitee.com/jia-xusheng/asdsadas/issues/IH4N5V https://gitee.com/jia-xusheng/asdsadas/issues/IH4N5S https://gitee.com/jia-xusheng/asdsadas/issues/IH4N5P https://gitee.com/jia-xusheng/asdsadas/issues/IH4N5O https://gitee.com/jia-xusheng/asdsadas/issues/IH4N5M https://gitee.com/jia-xusheng/asdsadas/issues/IH4N5J https://gitee.com/jia-xusheng/asdsadas/issues/IH4N5I https://gitee.com/jia-xusheng/asdsadas/issues/IH4N5H https://gitee.com/benny045685/bennasd/issues/IH4N5G https://gitee.com/benny045685/bennasd/issues/IH4N5D https://gitee.com/jia-xusheng/asdsadas/issues/IH4N5F https://gitee.com/benny045685/bennasd/issues/IH4N5E https://gitee.com/jia-xusheng/asdsadas/issues/IH4N5C https://gitee.com/benny045685/bennasd/issues/IH4N5A https://gitee.com/jia-xusheng/asdsadas/issues/IH4N56 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N4U https://gitee.com/benny045685/bennasd/issues/IH4N4W https://gitee.com/jia-xusheng/asdsadas/issues/IH4N4Z https://gitee.com/benny045685/bennasd/issues/IH4N4V https://gitee.com/jia-xusheng/asdsadas/issues/IH4N4R https://gitee.com/benny045685/bennasd/issues/IH4N4S https://gitee.com/benny045685/bennasd/issues/IH4N4P https://gitee.com/benny045685/bennasd/issues/IH4N4N https://gitee.com/benny045685/bennasd/issues/IH4N4Q https://gitee.com/jia-xusheng/asdsadas/issues/IH4N4X https://gitee.com/benny045685/bennasd/issues/IH4N4M https://gitee.com/benny045685/bennasd/issues/IH4N4K https://gitee.com/benny045685/bennasd/issues/IH4N4J https://gitee.com/benny045685/bennasd/issues/IH4N4H https://gitee.com/jia-xusheng/asdsadas/issues/IH4N4I https://gitee.com/benny045685/bennasd/issues/IH4N4F https://gitee.com/benny045685/bennasd/issues/IH4N4G https://gitee.com/jia-xusheng/asdsadas/issues/IH4N4D https://gitee.com/benny045685/bennasd/issues/IH4N4B https://gitee.com/benny045685/bennasd/issues/IH4N4A https://gitee.com/benny045685/bennasd/issues/IH4N47 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N43 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N41 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N45 https://gitee.com/benny045685/bennasd/issues/IH4N46 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N40 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N44 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N3Z https://gitee.com/benny045685/bennasd/issues/IH4N3Y https://gitee.com/benny045685/bennasd/issues/IH4N3X https://gitee.com/benny045685/bennasd/issues/IH4N3U https://gitee.com/benny045685/bennasd/issues/IH4N3T https://gitee.com/benny045685/bennasd/issues/IH4N3R https://gitee.com/benny045685/bennasd/issues/IH4N3S https://gitee.com/benny045685/bennasd/issues/IH4N3Q https://gitee.com/jia-xusheng/asdsadas/issues/IH4N3N https://gitee.com/benny045685/bennasd/issues/IH4N3L https://gitee.com/benny045685/bennasd/issues/IH4N3O https://gitee.com/jia-xusheng/asdsadas/issues/IH4N3M https://gitee.com/jia-xusheng/asdsadas/issues/IH4N3K https://gitee.com/benny045685/bennasd/issues/IH4N3F https://gitee.com/benny045685/bennasd/issues/IH4N3I https://gitee.com/jia-xusheng/asdsadas/issues/IH4N3H https://gitee.com/benny045685/bennasd/issues/IH4N3D https://gitee.com/benny045685/bennasd/issues/IH4N3C https://gitee.com/jia-xusheng/asdsadas/issues/IH4N3A https://gitee.com/benny045685/bennasd/issues/IH4N38 https://gitee.com/benny045685/bennasd/issues/IH4N37 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N35 https://gitee.com/benny045685/bennasd/issues/IH4N34 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N30 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N2Z https://gitee.com/benny045685/bennasd/issues/IH4N2V https://gitee.com/jia-xusheng/asdsadas/issues/IH4N2X https://gitee.com/jia-xusheng/asdsadas/issues/IH4N2T https://gitee.com/benny045685/bennasd/issues/IH4N2Q https://gitee.com/jia-xusheng/asdsadas/issues/IH4N2P https://gitee.com/jia-xusheng/asdsadas/issues/IH4N2M https://gitee.com/benny045685/bennasd/issues/IH4N2O https://gitee.com/benny045685/bennasd/issues/IH4N2N https://gitee.com/jia-xusheng/asdsadas/issues/IH4N2K https://gitee.com/jia-xusheng/asdsadas/issues/IH4N2J https://gitee.com/benny045685/bennasd/issues/IH4N2I https://gitee.com/jia-xusheng/asdsadas/issues/IH4N2H https://gitee.com/benny045685/bennasd/issues/IH4N2G https://gitee.com/jia-xusheng/asdsadas/issues/IH4N29 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N25 https://gitee.com/benny045685/bennasd/issues/IH4N2A https://gitee.com/benny045685/bennasd/issues/IH4N2B https://gitee.com/benny045685/bennasd/issues/IH4N28 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N21 https://gitee.com/benny045685/bennasd/issues/IH4N24 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N23 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N22 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N20 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N1U https://gitee.com/benny045685/bennasd/issues/IH4N1Y https://gitee.com/benny045685/bennasd/issues/IH4N1W https://gitee.com/jia-xusheng/asdsadas/issues/IH4N1V https://gitee.com/benny045685/bennasd/issues/IH4N1T https://gitee.com/jia-xusheng/asdsadas/issues/IH4N1Q https://gitee.com/benny045685/bennasd/issues/IH4N1R https://gitee.com/jia-xusheng/asdsadas/issues/IH4N1N https://gitee.com/benny045685/bennasd/issues/IH4N1P https://gitee.com/jia-xusheng/asdsadas/issues/IH4N1O https://gitee.com/jia-xusheng/asdsadas/issues/IH4N1K https://gitee.com/benny045685/bennasd/issues/IH4N1J https://gitee.com/jia-xusheng/asdsadas/issues/IH4N1I https://gitee.com/benny045685/bennasd/issues/IH4N1H https://gitee.com/jia-xusheng/asdsadas/issues/IH4N1F https://gitee.com/benny045685/bennasd/issues/IH4N1G https://gitee.com/benny045685/bennasd/issues/IH4N1D https://gitee.com/benny045685/bennasd/issues/IH4N1C https://gitee.com/jia-xusheng/asdsadas/issues/IH4N1B https://gitee.com/jia-xusheng/asdsadas/issues/IH4N1A https://gitee.com/jia-xusheng/asdsadas/issues/IH4N16 https://gitee.com/benny045685/bennasd/issues/IH4N15 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N14 https://gitee.com/benny045685/bennasd/issues/IH4N13 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N10 https://gitee.com/benny045685/bennasd/issues/IH4N0Y https://gitee.com/jia-xusheng/asdsadas/issues/IH4N11 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N0Z https://gitee.com/jia-xusheng/asdsadas/issues/IH4N0X https://gitee.com/jia-xusheng/asdsadas/issues/IH4N0W https://gitee.com/jia-xusheng/asdsadas/issues/IH4N0Q https://gitee.com/jia-xusheng/asdsadas/issues/IH4N0M https://gitee.com/jia-xusheng/asdsadas/issues/IH4N0K https://gitee.com/benny045685/bennasd/issues/IH4N0J https://gitee.com/jia-xusheng/asdsadas/issues/IH4N0H https://gitee.com/jia-xusheng/asdsadas/issues/IH4N0E https://gitee.com/jia-xusheng/asdsadas/issues/IH4N0G https://gitee.com/jia-xusheng/asdsadas/issues/IH4N0D https://gitee.com/benny045685/bennasd/issues/IH4N0F https://gitee.com/benny045685/bennasd/issues/IH4N0B https://gitee.com/jia-xusheng/asdsadas/issues/IH4N09 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N0A https://gitee.com/benny045685/bennasd/issues/IH4N07 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N04 https://gitee.com/benny045685/bennasd/issues/IH4N03 https://gitee.com/benny045685/bennasd/issues/IH4N05 https://gitee.com/benny045685/bennasd/issues/IH4N02 https://gitee.com/benny045685/bennasd/issues/IH4N00 https://gitee.com/jia-xusheng/asdsadas/issues/IH4N01 https://gitee.com/benny045685/bennasd/issues/IH4MZX https://gitee.com/jia-xusheng/asdsadas/issues/IH4MZY https://gitee.com/benny045685/bennasd/issues/IH4MZV https://gitee.com/jia-xusheng/asdsadas/issues/IH4MZT https://gitee.com/benny045685/bennasd/issues/IH4MZF https://gitee.com/benny045685/bennasd/issues/IH4MZN https://gitee.com/benny045685/bennasd/issues/IH4MZH https://gitee.com/jia-xusheng/asdsadas/issues/IH4MZP https://gitee.com/jia-xusheng/asdsadas/issues/IH4MZK https://gitee.com/jia-xusheng/asdsadas/issues/IH4MZL https://gitee.com/benny045685/bennasd/issues/IH4MZE https://gitee.com/jia-xusheng/asdsadas/issues/IH4MZI https://gitee.com/jia-xusheng/asdsadas/issues/IH4MZD https://gitee.com/benny045685/bennasd/issues/IH4MZG https://gitee.com/jia-xusheng/asdsadas/issues/IH4MZB https://gitee.com/jia-xusheng/asdsadas/issues/IH4MZA https://gitee.com/jia-xusheng/asdsadas/issues/IH4MZ5 https://gitee.com/jia-xusheng/asdsadas/issues/IH4MZ8 https://gitee.com/jia-xusheng/asdsadas/issues/IH4MZ7 https://gitee.com/jia-xusheng/asdsadas/issues/IH4MZ4 https://gitee.com/benny045685/bennasd/issues/IH4MZ3 https://gitee.com/benny045685/bennasd/issues/IH4MZ6 https://gitee.com/jia-xusheng/asdsadas/issues/IH4MZ1 https://gitee.com/benny045685/bennasd/issues/IH4MZ0 https://gitee.com/jia-xusheng/asdsadas/issues/IH4MYX https://gitee.com/benny045685/bennasd/issues/IH4MYY https://gitee.com/jia-xusheng/asdsadas/issues/IH4MYV https://gitee.com/benny045685/bennasd/issues/IH4MYQ https://gitee.com/benny045685/bennasd/issues/IH4MYM https://gitee.com/jia-xusheng/asdsadas/issues/IH4MYF https://gitee.com/benny045685/bennasd/issues/IH4MYI https://gitee.com/jia-xusheng/asdsadas/issues/IH4MYK https://gitee.com/benny045685/bennasd/issues/IH4MYS https://gitee.com/benny045685/bennasd/issues/IH4MYO https://gitee.com/jia-xusheng/asdsadas/issues/IH4MY7 https://gitee.com/benny045685/bennasd/issues/IH4MYT https://gitee.com/jia-xusheng/asdsadas/issues/IH4MYH https://gitee.com/benny045685/bennasd/issues/IH4MYG https://gitee.com/jia-xusheng/asdsadas/issues/IH4MYB https://gitee.com/benny045685/bennasd/issues/IH4MY9 https://gitee.com/jia-xusheng/asdsadas/issues/IH4MY8 https://gitee.com/benny045685/bennasd/issues/IH4MY6 https://gitee.com/jia-xusheng/asdsadas/issues/IH4MY2 https://gitee.com/benny045685/bennasd/issues/IH4MXZ https://gitee.com/benny045685/bennasd/issues/IH4MY0 https://gitee.com/jia-xusheng/asdsadas/issues/IH4MXY https://gitee.com/benny045685/bennasd/issues/IH4MXU https://gitee.com/jia-xusheng/asdsadas/issues/IH4MXW https://gitee.com/benny045685/bennasd/issues/IH4MXX https://gitee.com/jia-xusheng/asdsadas/issues/IH4MXV https://gitee.com/benny045685/bennasd/issues/IH4MXR https://gitee.com/jia-xusheng/asdsadas/issues/IH4MXS https://gitee.com/benny045685/bennasd/issues/IH4MXQ https://gitee.com/jia-xusheng/asdsadas/issues/IH4MXP https://gitee.com/benny045685/bennasd/issues/IH4MXO https://gitee.com/jia-xusheng/asdsadas/issues/IH4MXN https://gitee.com/jia-xusheng/asdsadas/issues/IH4MXM https://gitee.com/jia-xusheng/asdsadas/issues/IH4MXH https://gitee.com/benny045685/bennasd/issues/IH4MXK https://gitee.com/benny045685/bennasd/issues/IH4MXJ https://gitee.com/benny045685/bennasd/issues/IH4MXI https://gitee.com/benny045685/bennasd/issues/IH4MXG https://gitee.com/benny045685/bennasd/issues/IH4MXE https://gitee.com/jia-xusheng/asdsadas/issues/IH4MXD https://gitee.com/benny045685/bennasd/issues/IH4MXC https://gitee.com/benny045685/bennasd/issues/IH4MX9 https://gitee.com/jia-xusheng/asdsadas/issues/IH4MX5 https://gitee.com/jia-xusheng/asdsadas/issues/IH4MX3 https://gitee.com/jia-xusheng/asdsadas/issues/IH4MX6 https://gitee.com/benny045685/bennasd/issues/IH4MX4 https://gitee.com/benny045685/bennasd/issues/IH4MX1 https://gitee.com/benny045685/bennasd/issues/IH4MX2 https://gitee.com/jia-xusheng/asdsadas/issues/IH4MX0 https://gitee.com/jia-xusheng/asdsadas/issues/IH4MWZ https://gitee.com/jia-xusheng/asdsadas/issues/IH4MWY

赞(0)
未经允许不得转载:171主机测评 » 使用PyQt5创建现代化的桌面应用程序
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址