2个不稳定版本
0.2.0 | 2023年8月24日 |
---|---|
0.1.0 | 2023年8月20日 |
#1839 in 数据库接口
595KB
1K SLoC
DB Introspector Gadget
这是一个CLI工具,可以反查MySQL或PostgreSQL数据库,并为提供的数据库模式生成包含TypedDict
定义的Python源文件。
[!IMPORTANT] 此工具默认生成需要Python >=
3.10
的Python源代码。
[!NOTE] 您可以使用
--minimum-python-version
(-p
)标志来更改此设置。有关进一步说明,请参阅以下帮助文档。
此工具的目的是帮助编写与数据库交互的类型安全Python代码变得更容易。
如果您有一些类似以下示例的Python代码
import psycopg2
with psycopg2.connect("dbname=testing user=postgres password=password") as conn:
with conn.cursor() as cur:
cur.execute("SELECT * FROM users")
for row in cur.fetchall():
print(row)
假设您暂时认为users
表具有以下模式
CREATE TABLE users(
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
此工具可以生成一个类似下面的Python文件
import datetime
from typing import TypedDict
class Users(TypedDict):
id: int
name: str
email: str
created_at: datetime.datetime
这样您就可以改进您的代码,使其看起来像这样
import psycopg2
from my_types import Users
with psycopg2.connect("dbname=testing user=postgres password=password") as conn:
with conn.cursor() as cur:
cur.execute("SELECT * FROM users")
users: List[Users] = cur.fetchall()
for row in users:
print(user) # type-hinting is now available on this dict!
安装 🛠️
注意:您需要安装cargo
。如果您还没有安装,可以在此安装:here.
cargo install db-introspector-gadget
用法 🚀
反查MySQL数据库
db-introspector-gadget -c mysql://root:[email protected]:3306/testing -s testing
反查Postgres数据库
db-introspector-gadget -c postgres://postgres:password@localhost:5432/testing -s public
反查Postgres数据库并指定输出文件名
db-introspector-gadget -c postgres://postgres:password@localhost:5432/testing -s public -o my_types.py
显示帮助信息
db-introspector-gadget --help
或
db-introspector-gadget -h
它应该输出以下内容
A MySql and Postgres database introspection tool that generates Python types
Usage: db-introspector-gadget [OPTIONS] --connection-string <CONNECTION_STRING> --schema <SCHEMA>
Options:
-c, --connection-string <CONNECTION_STRING>
The MySQL or Postgres connection string in the format `mysql://___` or `postgres://___` of the database that you would like to introspect
-s, --schema <SCHEMA>
The database schema that you would like to introspect and create table types for
-o, --output-filename <OUTPUT_FILENAME>
Optional output file path for the final source file output [default: table_types.py]
-p, --minimum-python-version <MINIMUM_PYTHON_VERSION>
Establishes the minimum supported Python Version [default: python3-10] [possible values: python3-6, python3-8, python3-10]
-h, --help
Print help (see more with '--help')
-V, --version
Print version
依赖项
~18–30MB
~483K SLoC