Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用sqlalchemy读取整个数据库,并将其转储为JSON_Python_Json_Sqlalchemy - Fatal编程技术网

Python 使用sqlalchemy读取整个数据库,并将其转储为JSON

Python 使用sqlalchemy读取整个数据库,并将其转储为JSON,python,json,sqlalchemy,Python,Json,Sqlalchemy,Django具有方便的manage.py命令dumpdata 目前,我仅限于使用sqlalchemy,我也想做同样的事情: 将连接字符串作为输入,如mysql+pymysql://user:pwd@localhost:3306/'和以JSON的形式获取数据库的内容(我不需要Django提供的所有元信息,但我不介意) 我详细介绍了如何将SQLAlchemy对象转储到JSON,并概述了如何从数据库中获取所有表名: meta = MetaData() input_db = f'sqlite:///tm

Django具有方便的
manage.py
命令
dumpdata

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

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

我详细介绍了如何将SQLAlchemy对象转储到JSON,并概述了如何从数据库中获取所有表名:

meta = MetaData()
input_db = f'sqlite:///tmpsqlite'
engine = create_engine(input_db)
meta.reflect(bind=engine)
print(meta.tables)

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

将我的解决方案留给后代:

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)

请注意,
zip(…)
是多余的。A本身就是一个映射,您只需将其传递给
dict()
构造函数:
dict(row)
。如果您传递
dict()
一个row代理对象,就会得到它。sqlalchemy所需的导入是来自sqlalchemy import create\u引擎的
;从sqlalchemy.schema导入元数据