在有共同字段下的pydantic类转换不正确问题
在使用 Pydantic 进行数据验证和设置时,你可能会遇到一个问题:当多个类有共同字段时,Pydantic 可能无法正确地区分这些类。让我通过一个简单的例子来解释这个问题。 ...
在使用 Pydantic 进行数据验证和设置时,你可能会遇到一个问题:当多个类有共同字段时,Pydantic 可能无法正确地区分这些类。让我通过一个简单的例子来解释这个问题。 ...
前因 由于python中没有方便快捷生成美观图片的方案,所以我使用了jinja2模板生成html后交给playwright生成网页图片,这其中,图片资源可以使用base64格式解决,而字体加载就难了。 ...
前言 这是一次从创建项目到测试打包上传Pypi的过程,记录一下。 创建项目 这里我是用的是pdm这个包管理工具,创建项目的命令是pdm init,跟着引导一步步走,之后会生成一个pyproject.toml文件,里面有项目的一些基本信息,比如作者、版本号等。下面是一个示例: ...
一般 try: import numpy except ImportError: print("numpy is not installed") 更推荐 from importlib.util import find_spec if find_spec("numpy") is not None: print("numpy is installed") else: print("numpy is not installed")
安装 pip install rich # PDM pdm add rich 文档 & 源码 基础 from rich import print print("Hello World") Rich功能非常丰富,从日志处理到富文本显示甚至动态的终端界面。 要使用Rich用做界面的话,一般是这样的: from rich.console import Console from rich.layout import Layout from rich.panel import console = Console() panel = Panel(name="panel_name") layout = Layout(panel,name="layout_name") 界面Layout和面板Panel是经常要用到的东西,Layout作为界面布局,Panel内展示元素并风格化,比如经常使用的表格Table;要实现动态变化而不是print需要用到Live。 ...
需求 以我的bot来说: Bot: ├─config ├─core ├─modules │ ├─required │ │ ├─BotManager │ │ ├─BotStatus │ │ ├─ExceptionCatch │ │ ├─... │ └─self │ ├─Modules1 │ ├─Modules2 │ ├─... ├─resources ├─service └─utils 模块统一放在modules下,required是bot运行必须的模块,self是可卸载安装的模块。 ...
描述 print(user) # name=user,age=18, ... session.commit() print(user) # empty 原因 sqlalchemy为了保持session内的数据同步,默认了expire_on_commit为True,它表现在: # 查询 b = session.query(User).filter(User.id==2).first() # 更改数据 b.name = "user_b" session.add(b) session.flush() session.commit() # commit后再次访问,其实是重新进行了select操作 b.name # user_b expire_on_commit可以用来更改 SQLAlchemy 的对象刷新机制,默认值为True即在session调用commit之后会主动将同一个session在commit之前查询得到的 ORM 对象的_sa_instance_state.expire属性设置为Flase,再次读取该对象属性时将重载这个对象,方法是重新调用之前的查询语句。 ...
连接单个数据库 from typing import Optional from sqlmodel import Field, Session, SQLModel, create_engine # 表 class Hero(SQLModel, table=True): id: Optional[int] = Field(default=None, primary_key=True) name: str secret_name: str age: Optional[int] = None # 连接 engine = create_engine("sqlite:///database.db") # 建表 SQLModel.metadata.create_all(engine) 连接多个数据库 from typing import Optional from sqlmodel import Field, Session, SQLModel, create_engine from sqlmodel.main import registry # 表1 table1 = registry() class Hero1(SQLModel, table=True, registry=table1): id: Optional[int] = Field(default=None, primary_key=True) name: str secret_name: str age: Optional[int] = None # 表2 table2 = registry() class Hero2(SQLModel, table=True, registry=table2): id: Optional[int] = Field(default=None, primary_key=True) name: str secret_name: str age: Optional[int] = None # 连接1 engine1 = create_engine("sqlite:///database1.db") # 连接2 engine2 = create_engine("sqlite:///database2.db") # 建表1 Hero1.metadata.create_all(engine1) # 建表2 Hero2.metadata.create_all(engine2) 一点优化 显然这样建多表会很麻烦,一种优化方案是: ...
同步 # sync_session # example(id, name) e = example(name="name1") db.add(e) db.flush() print(e.id) # id = 1 异步 # async_session # example(id, name) e = example(name="name1") db.add(e) await db.flush() await db.commit() await db.refresh(e) print(e.id) # id = 1
模块化 我现在是这样的 Bot: └─config └─db └─modules └─utils config内包含所有模块用到的配置项 db内是实体类和业务语句的集合 utils内是一些公共工具 现在问题是,config与db非常难维护,一打开就是几百行语句,找起来都麻烦,数据库和配置项有一点不对整个bot就无法启动 ...