使用 sqlalchemy 读取整个数据库并转储为 JSON

Seb*_*zny 3 python json sqlalchemy

Django 有一个方便的manage.py命令dumpdata ,可以配置为将整个数据库转储为JSON.

目前我仅限于使用sqlalchemy并且我想做同样的事情:

将连接字符串作为输入'mysql+pymysql://user:pwd@localhost:3306/',并获取数据库的内容JSON(我不需要 Django 提供的所有元信息,但我不介意)。

发现这个问题详细说明了如何将 SQLAlchemy 对象转储到 JSON,这来自 sqlalchemy 文档,概述了如何从数据库获取所有表名:

meta = MetaData()
input_db = f'sqlite:///tmpsqlite'
engine = create_engine(input_db)
meta.reflect(bind=engine)
print(meta.tables)
Run Code Online (Sandbox Code Playgroud)

如何检索这些表的所有内容,然后将它们转换为JSONsqlalchemy是否有类似于 django 的 dumpdata 功能的内置命令?

Seb*_*zny 6

为后代留下我的解决方案:

import json

def dump_sqlalchemy(output_connection_string,output_schema):
    """ Returns the entire content of a database as lists of dicts"""
    engine = create_engine(f'{output_connection_string}{output_schema}')
    meta = MetaData()
    meta.reflect(bind=engine)  # http://docs.sqlalchemy.org/en/rel_0_9/core/reflection.html
    result = {}
    for table in meta.sorted_tables:
        result[table.name] = [dict(row) for row in engine.execute(table.select())]
    return json.dumps(result)
Run Code Online (Sandbox Code Playgroud)

  • sqlalchemy 所需的导入是“from sqlalchemy import create_engine;” 从 sqlalchemy.schema 导入元数据` (2认同)