从Python将整个SQL Server数据库复制为JSON
我遇到了一个不太寻常的转换问题。大约十年前,我用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 的相关内容。