如何在python中的不同数据库上运行.sql文件

时间:2013-09-19 07:52:03

标签: python sql sql-server oracle sqlalchemy

所以这是我的要求。我有一些使用python模块在不同的数据库上运行.sql文件,如oracle,MSSQL,db2等,在linux和windows等不同平台上。在我的要求中,我无法打开sql文件并运行每个命令。我要整个运行.sql文件。我正在阅读关于sql炼金术但似乎必须执行每个语句。那么是否有任何模块可以运行完整的.sql文件

PS: - 我有关于每个数据库的.sql文件,即如果我是oc.sql for oracle那么每个语句都兼容在oracle数据库上运行,如果这个abc.sql文件不应该运行在MSSQL或DB2上,我的程序不会在这些数据库上执行它。

1 个答案:

答案 0 :(得分:1)

没有。有标准的SQL语言,但是这个标准只说SELECTINSERT等应该如何工作。 .sql文件没有任何内容。这样每个DBMS供应商都有自己的方式来处理这些文件。在PostgreSQL中,您可以使用文件作为输入轻松运行psql命令行程序。在Oracle世界中,您可以尝试使用sqlplus执行相同操作,但当然此类.sql文件会有所不同。在PostgreSQL中,您应该使用非标准SQL命令设置输入文件的编码,其他供应商将报告为错误。对于这样的事情,Oracle使用环境设置。对于Oracle,.sql的{​​{1}}文件必须以sqlplus等结尾。即使是每个供应商的日期时间字符串文字也不同。 MS SQL使用COMMIT; EXIT;,它不适用于Informix,PostgreSQL和Oracle。

很快:似乎不可能为每个数据库执行此类程序。

您所能做的就是邀请更改标准输入文件的附加图层(添加页眉和页脚,转换日期时间文字等)。然后,可以针对数据库供应商提供的命令行工具或者能够执行此类转换文件的专用程序运行此类准备好的文件。

修改

对于不同的数据库,您似乎有不同的文件,甚至对于不同的数据库版本。您还可以使用能够运行{ts '...'}文件的本机程序。所以唯一的问题是检测数据库和数据库版本并使用适当的本机客户端执行适当的文件。这是Jython中的代码(我经常使用JDBC,但您可以使用DB-API和Python数据库驱动程序):

.sql