如何在django/python中使用win32com调度?

如何在django/python中使用win32com调度?,python,django,win32com,Python,Django,Win32com,我正在尝试将我的django应用程序与PIOLEDB连接,但Dispatch引发下面的异常这是我的代码,请指导我做错了什么。我是PI系统的新手 oConn = Dispatch('ADODB.Connection') oRS = Dispatch('ADODB.RecordSet') #oConn.ConnectionString = "Provider=PIOLEDB;Data Source=localhost;User ID=piadmin;database=sparktest" oCon

我正在尝试将我的django应用程序与PIOLEDB连接,但Dispatch引发下面的异常这是我的代码,请指导我做错了什么。我是PI系统的新手

oConn = Dispatch('ADODB.Connection')
oRS = Dispatch('ADODB.RecordSet')

#oConn.ConnectionString = "Provider=PIOLEDB;Data Source=localhost;User ID=piadmin;database=sparktest"
oConn.ConnectionString = "Provider=PIOLEDB; Data Source=pi-spark; Integrated Security=True"
if oConn.State == 0:
    print "We've connected to the database."
    # db_cmd = """SELECT time,tag,value FROM piarchive..picomp2 where tag like 'BOP:692-RTU-9001W'"""
    db_cmd = """SELECT * FROM piarchive..picomp2 WHERE tag = 'SEC.CT06.SG.CT6-GEN-CE-SEI-Y.V.none.1X.Ycoord' and time > '11/1/2014 2:42 PM' and time < '11/1/2014 3:47 PM'"""
    #db_cmd = """SELECT * FROM piarchive..picomp2 WHERE tag = 'SEC.CT06.SG.CT6-TRB-EX-SEI-5.V.none.2xMagnitude'"""
    # db_cmd = """SELECT * FROM pipoint"""1
    oRS.ActiveConnection = "Provider=PIOLEDB; Data Source=localhost; Integrated Security=True"
    oRS.Open(db_cmd)
    while not oRS.EOF:
        #print oRS.Fields.Item("tag").Value   # Ability to print by a field name
        row=""
        for i in range(0,oRS.Fields.Count):
            row+="      "+str(oRS.Fields.Item(i).Value)
        # print oRS.Fields.Item(0).Value        # Ability to print by a field location
        print row
        oRS.MoveNext()
    oRS.Close()
    oRS = None
else:
    print "Not connected"

#if oConn.State == 0:
   # oConn.Close()
oConn = None

@Sayse的答案是正确的,但他们没有告诉您如何;-)。我们开始:

在您的
调度
代码前。有关更多详细信息,请参阅和

例如,我使用outlook从Django发送(或保存)电子邮件的代码如下所示:

def send_mail_via_outlook(address, mailtext):
    import pythoncom
    pythoncom.CoInitialize() #@UndefinedVariable
    outlook = win32.Dispatch('outlook.application')
    mail = outlook.CreateItem(0)
    mail.To = address
    mail.Subject = "My Subject"
    mail.body = mailtext
    #    mail.send #send e-mail immediately
    mail.save() #save e-mail in draft folder.    

看起来你需要调用
CoInitialize
如果我把它放在python文件中并从terminalit执行,那么这段代码运行得很好。这段代码很长时间以来一直困扰着我,而你的答案适合我!非常感谢!
import pythoncom
pythoncom.CoInitialize()
def send_mail_via_outlook(address, mailtext):
    import pythoncom
    pythoncom.CoInitialize() #@UndefinedVariable
    outlook = win32.Dispatch('outlook.application')
    mail = outlook.CreateItem(0)
    mail.To = address
    mail.Subject = "My Subject"
    mail.body = mailtext
    #    mail.send #send e-mail immediately
    mail.save() #save e-mail in draft folder.