从Python运行SQL

2024-10-01 09:17:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经研究过如何从python代码中运行.sql(例如execute *.sql file with python MySQLdb),但无法使其正常工作。在

下面是我的Python,它调用sql:

import arcpy, cx_Oracle
connection = cx_Oracle.connect('p760/123.abc@oraclebd01')
cursor = connection.cursor()
SDE = "C:\\Users\\david\\AppData\\Roaming\\ESRI\\Desktop10.1\\ArcCatalog\\p760.sde"
CodeSpace = r"G:\Projects\P760\Spatial_Processing\CODE\SQL\\"

fd = open(CodeSpace + 'run_pre_landbase_v1.sql', 'r')
sqlFile = fd.read()
fd.close()
sqlCommands = sqlFile.split(';')
for command in sqlCommands:
    print command
    try:
        cursor.execute(command)
    except:
        print "Command skipped"

以下是我在Toad for Oracle中按F5时可以正常工作的SQL代码:

^{pr2}$

我有点迷茫,不明白可能影响我使用python调用的所有因素。我以前用这个方法建立了连接,但在这些情况下,我运行了用python编写的代码行。这是我第一次尝试运行完整的SQL。在


Tags: 代码forexecutesqlconnectioncursorcommandoracle
1条回答
网友
1楼 · 发布于 2024-10-01 09:17:01

由于您不想描述您的问题(请参阅我对“不起作用”作为问题描述的有用性的评论),我们只能猜测,但以下是三个明显缺失的步骤:

  1. 提交您的交易
  2. 关闭光标
  3. 正在关闭数据库连接。在

如果你的问题是“我没有异常,回溯或其他什么,但数据库没有更新”,那么1。很可能是罪魁祸首。在

另外,您的bare except子句确实无助于调试。您应该只捕获预期的异常(我不知道cxu Oracle可能会引发什么,但希望有文档记录),或者至少打印异常:

for command in sqlCommands:
    print command
    try:
        cursor.execute(command)
    except exception as e:
        print "Command failed with %s - skipped" % e

最后(不是双关语),您应该改进SQL文件的解析—跳过“/**/”注释部分,删除“comment”部分等

或者因为Oracle有一个命令行工具可以运行sql文件,所以可以用os.system()或子进程来运行它。。。在

相关问题 更多 >