#postgresql #database-schema #python #mysql #definition #generate #tool

app db-introspector-gadget

一个MySQL和PostgreSQL数据库反查工具,可生成Python类型

2个不稳定版本

0.2.0 2023年8月24日
0.1.0 2023年8月20日

#1839 in 数据库接口

MIT 许可证

595KB
1K SLoC

DB Introspector Gadget

Inspector Gadget introspecting a safe

这是一个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