Frage

Ich habe einen Code, der wie ein Zauber funktioniert, wenn ich das Programm auf einem Mac (MBA laufende Mavericks) ausführe. Wenn ich den Code in ein Windows -Box (Windows Server 2008 R2 64 -Bit) verschiebe, erhalte ich einen Fehler in der SQL -Abfrage selbst (unten anzeigen). Der Fehler zeigt an, dass in der Nähe des "," einen Syntaxfehler vorliegt.

Der Code, den ich ausführe, ist unten:

    try:
      cur.execute("SELECT * FROM dbo.IPAM_Node as A \
        FULL OUTER JOIN IPAM_NodeAttrData as B ON A.IPNodeId = B.IPNodeId \
        FULL OUTER JOIN IPAM_Group as C on A.SubnetId = C.GroupId \
        FULL OUTER JOIN IPAM_GroupAttrData as D on C.GroupId = D.GroupId \
        WHERE IPAddress IN (%s);",(Hosts_as_Tuples,))
      allrows = cur.fetchall()
      print 'allrows:', allrows

Dieser Code funktionierte nicht auf dem Mac, bis ich am Ende der "Wo" -Klausel das "" "hinzufügte. Hier scheint sich die Windows -Bibliothek zu beantragen. Ich habe versucht, das ",", das Programm läuft in Ordnung, aber es bewertet das Tupel nicht richtig.

Ich habe verschiedene Vorschläge wie die Verwendung von "" " - ohne Erfolg oder Verhaltensänderung ausprobiert.

Der Laufzeitfehler wird unten angezeigt:

C:\SFTP_Root\v1.0.1.d\Model>[07/Nov/2013:12:25:27] ENGINE Listening for SIGTERM.

[07/Nov/2013:12:25:27] ENGINE Bus STARTING
[07/Nov/2013:12:25:27] ENGINE Set handler for console events.
CherryPy Checker:
The Application mounted at '' has an empty config.

[07/Nov/2013:12:25:27] ENGINE Started monitor thread 'Autoreloader'.
[07/Nov/2013:12:25:27] ENGINE Started monitor thread '_TimeoutMonitor'.
[07/Nov/2013:12:25:27] ENGINE Serving on 10.188.49.151:4444
[07/Nov/2013:12:25:27] ENGINE Bus STARTED
it is NOT a list
Host List: ['10.188.49.0', '10.188.49.1', '10.188.49.2', '10.188.49.3']
**DATABASE ERROR: (102, "Incorrect syntax near ','.DB-Lib error message 102, sever
ity 15:\nGeneral SQL Server error: Check messages from the SQL Server\n")**
144.131.52.107 - - [07/Nov/2013:12:25:38] "GET /ip/informationservice/?ipaddress
=10.188.49.0/30 HTTP/1.1" 200 346 "" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.
9; rv:25.0) Gecko/20100101 Firefox/25.0"

Laut dem Ausführung Methode Die Bibliotheken an beiden Stellen sind auf derselben Version. Wie nachstehend:

Auf dem Mac:

isp-pc:site-packages matingara$ python
Python 2.7.5 (v2.7.5:ab05e7dd2788, May 13 2013, 13:18:45)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pymssql
>>> pymssql.__version__
'2.0.0'
>>>

Unter Windows (zwei Versionen von Python Proben):

C:\Python27>python.exe
Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pymssql
>>> pymssql.__version__
'2.0.0'
>>>

C:\Python27>python.exe
Python 2.7.5 (default, May 15 2013, 22:44:16) [MSC v.1500 64 bit (AMD64)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pymssql
>>> pymssql.__version__
'2.0.1'
>>>
War es hilfreich?

Lösung

Haben Sie die Nachrichten auf dem SQL -Server überprüft? (Ist die Datenbankverbindung auf beiden Maschinen in Ordnung?)

Haben Sie auch versucht, die Zeichenfolge zu bewerten, bevor Sie die Ausführung aufrufen? Etwas wie:

queryString = "SELECT * FROM dbo.IPAM_Node as A \
    FULL OUTER JOIN IPAM_NodeAttrData as B ON A.IPNodeId = B.IPNodeId \
    FULL OUTER JOIN IPAM_Group as C on A.SubnetId = C.GroupId \
    FULL OUTER JOIN IPAM_GroupAttrData as D on C.GroupId = D.GroupId \
    WHERE IPAddress IN (%s);" % (Hosts_as_Tuples,)

print queryString

cur.execute(queryString)

Andere Tipps

Dank Adam und einer Konsultation mit und SQL Guru hier haben wir es geschafft zu beweisen, dass die Bewertung des %s auf Mac und PC anders zu funktionieren scheint.

Also habe ich den Code wie folgt umstrukturiert (ähnlich dem, was Adam vorgeschlagen hat - aber etwas anders):

try:
  sqlQuery = "SELECT * FROM dbo.IPAM_Node as A \
    FULL OUTER JOIN IPAM_NodeAttrData as B ON A.IPNodeId = B.IPNodeId \
    FULL OUTER JOIN IPAM_Group as C on A.SubnetId = C.GroupId \
    FULL OUTER JOIN IPAM_GroupAttrData as D on C.GroupId = D.GroupId \
    WHERE IPAddress IN " + str(Hosts_as_Tuples) + ";" 
  cur.execute(sqlQuery)

Mit anderen Worten, ich habe die Frage aufgebaut, indem ich mehrere Saiten verkettete. Dies funktioniert jetzt unter Windows!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top