SQLALchemy - Database Tables

SQLALchemy Core and SQLALchemy ORM SQLALchemy 分位两个模块:Core 和 ORM (Object-Relational Mapping)。 Core 模块包含对所有受支持数据库方言的集成逻辑,一组用于描述数据库表的类,用于 Python 语言生成 SQL 语句。 ORM 模块在 Python 应用程序中引入了一层抽象,使得许多数据库操作可以根据对 Python 对象执行的操作自动推导出来。 Database Engine SQLALchemy 使用 engine 对象来管理数据库连接,包含 Core 和 ORM 应用。 create_engine() 函数通过数据库 url 创建一个 engine。 格式为: {dialet}{+driver}://{username}:{password}@{hostname}:{port}/{database} 其中 SQLite 比较特殊,无需 driver。 对于导入 DATABASE_URL 有两种方式,一种是使用 load_dotenv() 加载 .env 文件的环境变量 import os from dotenv import load_dotenv from sqlalchemy import create_engine load_dotenv() engine = create_engine(os.environ['DATABASE_URL']) 另一种是通过 Pydantic BaseSettings import os from pathlib import Path from pydantic_settings import BaseSettings from pydantic impot SecretStr from functools import lru_cache from sqlalchemy import create_engine class Settings(BaseSettings): POSTGRESQL_HOST: str POSTGRESQL_PORT: int POSTGRESQL_USER: str POSTGRESQL_PASSWORD: SecretStr POSTGRESQL_DB: str @property def postgres_db_url(self) -> str: # 通常无需显示地写 driver,只有更换 dirver 时才需要写 return f'postgresql://{self.POSTGRESQL_USER}:{self.POSTGRESQL_PASSWORD.get_secret_value()}@{self.POSTGRESQL_HOST}:{self.POSTGRESQL_PORT}/{self.POSTGRESQL_DB}' class Config: env_file = str(Path(__file__).parent / '.env') case_sensitive = True extra = 'ignore' # 忽略额外字段 @lru_cache def get_settings() -> Settings: return Settings() # 使用示例 settings = get_settings() print('Host:', settings.POSTGRESQL_HOST) print('Password:', settings.PASSWORD.get_secret_value()) engine = create_engine(settings.postgres_db_url) create_engine() 函数有以下配置参数: ...

January 26, 2026 · 8 min · 1512 words · Starslayerx

Postgresql 03: psql Tool Introduction

psql 介绍 psql 是 PostgreSQL 中的一个交互式命令行工具,类似 Oracle 的 sqlplus,它允许用户交互式输入 SQL 语句或命令,然后发送给 PostgreSQL 服务器,再显示结果。 此外,psql 还有大量类似 shell 的特性来编写脚本,实现自动化操作。 在安装 postgresql 的时候,会创建一个与初始化数据库时的操作系统同名的数据库用户,这个用户是这个数据库的超级用户。 因此,在 OS 用户下登陆数据库时,会执行操作系统认证,因此无需用户名和密码,也可以通过修改 pg_hba.conf 文件来要求用户输入密码。 psql 也支持使用命令行参数来查询信息和执行 SQL,这种非交互模式与 linux 命令就没有太大区别了。 例如使用 psql -l 查看数据库,当然也可以通过命令进入数据库后,输出 \l 命令查看有哪些数据库。 默认会有一个叫 postgres 的数据库,这是默认安装后就有的一个数据库。 还有两个模板数据库,template0 和 template1。 当用户创建创建数据库时,是从模板数据库 template1 克隆来的,因此通常可以订制 template1 中的内容,例如添加一些表和函数,这样后续创建的数据库也会有这些表和函数。 template0 是一个最简化的数据库,如果指明从此数据库克隆,将创建出一个最简化的数据库。 使用 \d 查看有哪些表,使用 \c 连接到某数据库。连接命令格式如下: psql -h <hostname or ip> -p <port> [数据库名称] [用户名称] 也可以通过环境变量指定 export PGDATABASE=db_name export PGHOST=ip export PGPORT=port export PGUSER=postgres psql 常用命令 \h 命令查询 SQL 语法 ...

November 17, 2025 · 2 min · 254 words · Starslayerx

PostgreSQL 02: SQL Basis

SQL 入门 SQL (Structured Query Language) 是关系数据库最重要的操作语言,且影响已经超出了数据库领域,这篇文章介绍基础部分。 语句分类 SQL 命令一般分为 DQL、DML、DDL 三类: DQL: Data Query Language 数据查询语句,基本就是 SELECT 查询命令,用于数据查询。 DML: Data Manipulation Language 数据操纵语言,主要用于插入、更新、删除数据,即 INSERT、UPDATE、DELETE 三类。 DDL: Data Definition Language 数据定义语言,用于创建、删除、修改表、索引等数据库对象的语言。 词法结构 每次执行的 SQL 语句可以由多条 SQL 命令组成,多条 SQL 语句命令之间由分号 (;) 分隔。 SQL 命令由一系列记号组成,这些记号可以由关键字、标识符、双引号包围的标识符、常量和单引号包围的常量组成。 SQL 命令中可以有注释,这些注释在 PostgreSQL 中等同于空白。 例如下面这些 SQL 命令 SELECT * FROM OSDBA_TABLE01; UPDATE OSDBA_TABLE SET COL1 = 64; INSERT INTO OSDBA_TABLE VALUES (232, 'hello osdba'); DDL 语句 使用 psql 会默认连接到和用户名一样的数据库中,也可以使用命令 psql postgres 来连接到默认数据库,或者 creatdb db_name 创建新数据库。 ...

November 7, 2025 · 5 min · 1022 words · Starslayerx

PostgreSQL 01: Introduction

PostgreSQL 的安装与配置 安装 brew 安装后 brew services start postgresql@17 可以启动服务,使用 brew services list 查看服务状态。 也可以通过设定环境变量 export PGDATA=/opt/homebrew/var/postgresql@17 后使用命令 initdb 创建数据库簇,然后 pg_ctl start -D $PGDATA 启动。 停止命令为 pg_ctl stop -D $PGDATA [-m SHOWDOWN-MODE],其中 -m 是服务器停止方法: smart: 等所有连接终止后,关闭数据库。如果客户端连不上,则无法关闭数据库。 fast: 快速关闭数据库,断开客户端连接,让已有的事务回滚,然后关闭数据库。相当于 Oracle 关闭时的 immediate 模式。 immediate: 立即关闭数据库,相当于数据库进程立即停止,直接退出,下次启动数据库需要恢复。相当于 Oracle 关闭时的 abort 模式。 PostgreSQL 数据库中的 immediate 关机模式相当于 Oracle 数据库中的 abort 关机模式,而 Oracle 中的 immediate 关机模式实际上对应的是 PostgreSQL 中的 fast 模式。 配置 PostgreSQL 数据库的配置主要通过修改数据目录下的 postgresql.conf 和 pg_hba.conf 文件来实现的。 ...

November 5, 2025 · 1 min · 198 words · Starslayerx