用 SQLAlchemy 写 ORM 时经常需要修改数据表字段,这时一般方法是手动改数据表,还可能要处理新增的 not null 字段的默认值,比较麻烦。
因此我们选择 alembic 完成数据库迁移操作,快捷更新表结构。
操作
官网有详细教程,这里说明一下我的操作过程,列一下遇到的坑。
创建环境
假设已经用 poetry 创建好了虚拟环境。
poetry add alembic
Original...About 7 min
用 SQLAlchemy 写 ORM 时经常需要修改数据表字段,这时一般方法是手动改数据表,还可能要处理新增的 not null 字段的默认值,比较麻烦。
因此我们选择 alembic 完成数据库迁移操作,快捷更新表结构。
官网有详细教程,这里说明一下我的操作过程,列一下遇到的坑。
假设已经用 poetry 创建好了虚拟环境。
poetry add alembic
需求
有两个数据表,主要字段如下:
Food
: id
, name
Weigh
: id
, food_id
, weight
需要统计每个 Food
的 weight
的数量、平均数、标准差。
需求
给点 GPS 经纬度,查找给点目录下地理坐标接近的照片。
现在大部分手机拍照会记录 GPS 信息(如果启用功能),该信息会被记录到 EXIF 元数据中。在 Python 可以使用 exifread
包来读取 EXIF 信息。一个简单的示例:
with open(path, 'rb') as f:
exif = exifread.process_file(f)
需求:将 Latex 公式转为图片,svg 或 png 格式。
其实我们熟悉的 matplotlib 就支持这个功能,可以应付一些简单的情况(复杂的后面说)。
import matplotlib.font_manager as mfm
from matplotlib.mathtext import math_to_image
prop = mfm.FontProperties(math_fontfamily='stix', size=64, weight='bold')
math_to_image(r"$\sum_{i=1}^n i$", "path/to/output.svg", prop=prop, dpi=72)
Python 有着和 C++ 极为相似的 import 系统,都是 include once。这样就很容易产生循环包含/导入的问题。
从依赖关系角度,确实可以通过将依赖关系构建成树的方式来避免循环导入。但是当使用 typing 的时候,情况就不一样了……
Ubuntu 22.04,配置 conda。
装了新版 Python 后使用 matplotlib 出现了这样的问题:
****.py: UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure.
plt.show()