IronPython.Runtime.Exceptions.ImportException:'没有名为'pyodbc'的模块'

2024-10-06 12:25:40 发布

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

我正在尝试使用IronPython从VB.Net运行python脚本。到目前为止,我已经安装了Python和IronPython。我有如下所示的ExecPython方法。当我调用一个简单的print/hello-world类型的脚本时,它工作得很好。这个DBTest.py脚本只是使用pyodbc连接到数据库并执行一个基本的select查询

我在source.Execute(scope)行中得到的错误是“IronPython.Runtime.Exceptions.ImportException:'没有名为'pyodbc'的模块”

我已经使用pip安装pyodbc安装了pyodbc。当我以空闲状态运行DBTest.py脚本时,它运行良好。 我不确定这是否是一个限制,或者在设置中是否缺少一些东西

提前感谢您的帮助

Sub ExecPython(ByVal argv As List(Of String))

    Dim engine As ScriptEngine = Python.CreateEngine

    Dim scriptPath As String = "C:\scripts\DBTest.py"
    Dim source As ScriptSource = engine.CreateScriptSourceFromFile(scriptPath)

    argv.Add("")

    engine.GetSysModule.SetVariable("argv", argv)

    engine.SetSearchPaths({"C:\Users\MYUSERNAME\AppData\Local\Programs\Python\Python39\Scripts",
                          "C:\Users\MYUSERNAME\AppData\Local\Programs\Python\Python39\include",
                          "C:\Users\MYUSERNAME\AppData\Local\Programs\Python\Python39\Lib",
                          "C:\Program Files\IronPython 3.4\Lib"})

    Dim eIO As ScriptIO = engine.Runtime.IO

    Dim errors As New MemoryStream
    eIO.SetErrorOutput(errors, Text.Encoding.Default)

    Dim results As New MemoryStream
    eIO.SetOutput(results, Text.Encoding.Default)

    Dim scope As ScriptScope = engine.CreateScope
    source.Execute(scope)

    Console.WriteLine("ERRORS:")
    Console.WriteLine(FormatResult(errors.ToArray))
    Console.WriteLine("")
    Console.WriteLine("RESULTS:")
    Console.WriteLine(FormatResult(results.ToArray))

End Sub

下面是我正在调用的python脚本。当我从空闲状态运行模块时,它会运行

import pyodbc

conn = pyodbc.connect('Driver={SQL Server};'
                      'Server=MYSERVERNAME;'
                      'Database=MYDBNAME;'
                      'Trusted_Connection=yes;')

cursor = conn.cursor() cursor.execute('SELECT * FROM dbo.TABLENAME')

for row in cursor:
    print(row)

Tags: py脚本sourceasuserscursorengineconsole
1条回答
网友
1楼 · 发布于 2024-10-06 12:25:40

已经有一段时间了,也许你已经找到了解决办法

但一般来说,为了能够使用“模块”,您需要导入clr并使用addReference函数。然后必须使用python样式导入名称空间

例如:

import clr
clr.AddReference('System')
from System import *

相关问题 更多 >