从Python将整个SQL Server数据库复制为JSON

0 投票
4 回答
1122 浏览
提问于 2025-04-15 21:05

我遇到了一个不太寻常的转换问题。大约十年前,我用ASP写了一个大型网站。随着时间的推移,这个网站变成了ASP.NET,但数据库一直没变。

我刚刚用Django重新做了这个网站,并且复制了所有核心数据。但在我取消主机账户之前,我需要确保有一个长期的数据备份,这样如果发现缺少什么,我可以从本地备份中恢复。

事情变得复杂的是,我现在没有Windows系统了。之前我把所有机器都换成了Ubuntu。我可以请求主机给我一个备份,但由于没有可以使用MSSQL的机器,如果需要的话,我也无法使用这个备份。

所以我在寻找一些可以做到以下事情的工具:

db = {}
for table in database:
    db[table.name] = [row for row in table]

然后我可以把db序列化到某个地方,以便以后使用……但是我该如何遍历表格呢?有没有更简单的方法来完成这一切?MSSQL能否进行跨平台的SQLDump(包括数据)?

之前我用过pymssql来处理MSSQL,但我不知道如何遍历表格并复制行(最好能带上列标题,这样我才能知道数据是什么)。我不需要太多代码,只需要一个正确的方向。

4 个回答

1

我在需要从Python连接到SQL服务器时,觉得ADOdb这个Python模块很不错。这里有一个简单的教程/示例链接:http://phplens.com/lens/adodb/adodb-py-docs.htm#tutorial

1

我知道你提到的是JSON,但其实生成一个SQL脚本来把所有数据导出成XML格式是非常简单的:

SELECT  REPLACE(REPLACE('SELECT * FROM {TABLE_SCHEMA}.{TABLE_NAME} FOR XML RAW', '{TABLE_SCHEMA}',
                        QUOTENAME(TABLE_SCHEMA)), '{TABLE_NAME}', QUOTENAME(TABLE_NAME))
FROM    INFORMATION_SCHEMA.TABLES
WHERE   TABLE_TYPE = 'BASE TABLE'
ORDER BY TABLE_SCHEMA
       ,TABLE_NAME
1

看看 sysobjects 和 syscolumns 这两个表。你也可以试试:

SELECT * FROM sysobjects WHERE name LIKE 'sys%'

找找有没有其他你感兴趣的元数据表。想了解更多关于这些表的信息,可以查看 这里,还有更新版 SQL2005 的相关内容。

撰写回答