Skip to main content

90 posts tagged with "Technology"

View All Tags

SQLAlchemy Declare Models

· 4 min read
Kimi Gao
Fullstack & AI

在 SQLAlchemy 中定义数据模型(表结构)时,先要使用 declarative_base 类创建数据模型的基类。在继承类中,定义数据库表与 Python 对象的映射关系。

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String

engine = create_engine( # 创建数据库连接引擎
"sqlite:///./sql_app.db",
connect_args={"check_same_thread": False}
)
session = sessionmaker(autocommit=False, bind=engine) # 创建本地会话
Base = declarative_base() # 创建模型基类

class User(Base): # 定义数据模型类
__tablename__ = 'user' # 数据库中对应的表名
id = Column('id', Integer, primary_key=True) # 定义字段id,整型,对应数据库的id列
name = Column('name', String(50)) # 定义字段name,字符串型,对应数据库中的name列

Base.metadata.create_all(bind=engine) # 在数据库中创建表结构

SQLAlchemy Migration Notes

· One min read
Kimi Gao
Fullstack & AI

Users coming from older versions of SQLAlchemy, especially those transitioning from the 1.x style of working, will want to review this documentation.

SQLAlchemy Relationship Configuration

· 5 min read
Kimi Gao
Fullstack & AI

在 SQLAlchemy 中使用 relationship 函数定义关联关系(表关系),常用参数如下:

  • argument: 设置另外一个用于建立关联关系的数据模型类名称,字符串型,设置时可以省略 argument 参数名,直接在第一个参数位置指定数据模型类名称。
  • uselist: 是否建立一对多关系,默认 True,若设为 False 即为一对一关系。
  • backref: 反向引用,通过指定另外一个数据模型类的关联字段名,在一对多或多对多之间建立双向关系。
  • secondary: 用于指向多对多的中间表。
  • remote_side: 当外键是数据模型类自身时使用。
  • back_populates: 当属性为反向关系时,指定另外一个数据模型类对应的关联字段名。
  • cascade: 指定级联操作时的可用动作,比如,当删除主数据时,与其关联的子表是否会同步删除对应数据。

MySQL 索引

· 14 min read
Kimi Gao
Fullstack & AI

索引是关系型数据库中用来提升查询性能的一种数据结构。关系型数据库中的索引就像一本书的目录,我们可以想象一下,如果要从一本书中找出某个知识点,但是这本书没有目录,这将是多么可怕的事情!我们估计得一篇一篇的翻下去,才能确定这个知识点到底在什么位置。

tdNT1Y

创建索引虽然会带来存储空间上的开销,就像一本书的目录会占用一部分篇幅一样,但是在牺牲空间后换来的查询时间的减少也是非常显著的。

FastAPI 连接 MySQL

· 7 min read
Kimi Gao
Fullstack & AI

安装数据库驱动

Python 安装包中没有集成 MySQL 数据库驱动,而 ORM 框架 SQLAlchemy 依赖于数据库驱动,所以第一步需要安装 MySQL 驱动。在 Python 3.x 中推荐使用 PyMySQL,其遵循 Python 数据库 API v2.0 规范,并完全使用 Python 代码实现。

pip install pymysql

示例目录结构如下:

.
├── sql_app
│ ├── __init__.py
│ ├── database.py
│ ├── models.py
│ ├── schemas.py
│ ├── crud.py
│ ├── routers.py
│ └── sql_app.db
└── main.py

HTTP Request Methods

· 6 min read
Kimi Gao
Fullstack & AI

HTTP 的报文结构,它是由 header+body 构成,请求头里有请求方法请求目标,响应头里有状态码原因短语,本节的主要内容就是请求头里的请求方法

Method

图:HTTP请求方法

如上图所示,本文将 HTTP 方法分为了:常用方法、非常用方法和拓展方法。其中常用方法、非常用方法是需要我们重点掌握的,而拓展方法本文不会介绍,如果需要的话可以百度学习。

GET

GET 方法自 0.9 版出现并一直被保留至今,它的含义是请求从服务器获取资源,这个资源既可以是静态的文本、页面、图片、视频,也可以是由 PHP、Java 动态生成的页面或者其他格式的数据。

TypeScript Enum

· 11 min read
Kimi Gao
Fullstack & AI

枚举(Enum)类型经常被用于取值在一定范围内的场景,比如一周只能有七天,角色权限设计等。枚举类型变量使用enum字段来定义,枚举成员的值可以是数字或者字符串,并且枚举成员是只读的。

枚举按照类型划分,主要分为以下三种: