2010-10-20 10 views
5

Ich kann keine Verbindung zu mySQL db mit Pyodbc herstellen.pyodbc und mySQL

Hier ist ein Ausschnitt aus meinem Skript:

import pyodbc 
import csv 

cnxn = pyodbc.connect("DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost;DATABASE=mydb; UID=root; PASSWORD=thatwouldbetelling;") 
crsr = cnxn.cursor() 

with open('C:\\skunkworks\\archive\\data\\myfile.csv','r') as myfile: 
    rows = csv.reader(myfile, delimiter=',', quotechar='"') 
    for row in rows: 
     insert_str = 'INSERT into raw_data VALUES(something, something)' 
     print insert_str 
     #crsr.execute(insert_str) 
    cnxn.commit() 
    myfile.close() 

I am pyodbc.connect() Linie diesen Fehler:

pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnectW)')

ich diesen Fehler eine andere Frage in Bezug auf (und Python-Skripten Im Algemeinen). Wenn ich dies als ein Skript ausführe, schlägt es im Hintergrund fehl (ich hatte einen Stack-Trace erwartet). Ich muss jede Zeile manuell eingeben, um den Fehler zu finden.

Ich bin jetzt ein wenig faul (keine Ausnahme Behandlung) - ist das normale Verhalten eines Python-Skripts ohne Ausnahme-Behandlung stillschweigend fehlschlagen?

[Bearbeiten]

ich nicht mysqldb bin mit, weil ich schon Pyodbc bin mit meinen Daten aus einer anderen Quelle (MS Access) zu extrahieren. Ok, kein guter Grund - aber ich habe mich schon mit pyodbc herumgeschlagen und ich habe wirklich keine Lust mit einer anderen Bibliothek/Modul/Paket (was auch immer in Python genannt wird) für einen "einmaligen" Job zu kämpfen. Ich möchte nur meine Daten von verschiedenen Datenquellen in der Windows-Umgebung zu mySQL unter Linux verschieben. Einmal unter Linux bin ich wieder auf der Erde.

Das ist das ganze "Skript" genau dort. Ich habe gerade den obigen Code in einer Datei mit der Erweiterung .py gespeichert, und ich führe python myscript.py in der Befehlszeile aus. Ich führe dies auf meinem XP-Rechner

+1

Warum verwenden Sie den mysqldb-Treiber nicht? –

+0

"Wenn ich das als Skript ausführen"? Was hast du eigentlich gemacht? Bitte geben Sie einen Hinweis, was Sie getan haben. Welches OS? Was ist die Hölle? –

+0

"Ich habe nicht wirklich Lust, mit einer anderen Bibliothek/einem anderen Modul/Paket (was auch immer in Python genannt wird) für einen" einmaligen "Job zu ringen." Das verstößt gegen die Python-Weltansicht. Es scheint, dass wir nur neue Pakete herunterladen und mit ihnen ringen. Die Verwendung eines Pakets für den beabsichtigten Zweck ist wichtig. 'pyodbc' kann wahrscheinlich keine Verbindung zu MySQL herstellen. Zeitraum. –

Antwort

1

MySQLdb (oder oursql) und pyodbc beide haben die gleiche Schnittstelle (DB-API 2), nur müssen Sie nicht mit ODBC-Probleme umgehen, wenn Sie die ehemalige verwenden. Ich empfehle dringend, stattdessen MySQLdb (oder oursql) zu verwenden.

+1

MySQLdb kann nicht unter Windows installiert werden. Autor akzeptiert ziemlich, dass es unter Windows nicht funktioniert. – skyeagle

+0

Ich habe eine andere Option erwähnt. –

+0

Auch das: http://stackoverflow.com/questions/645943/mysql-for-python-in-windows –

2

Erste, Nach dem official docs, wenn Sie, ohne ein DSN verbinden möchten, müssen Sie OPTION = 3 in der Verbindungszeichenfolge angeben:

ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost;DATABASE=test;USER=venu;PASSWORD=venu;OPTION=3;" 

Wenn das nicht funktioniert, ich d weitere Problembehandlung durch Erstellen eines DSN.

Sekunde, kein Python sollte nicht stillschweigend ausfallen. Wenn dies der Fall ist, wenn Sie Ihr Skript ausführen, ist etwas anderes nicht in Ordnung.

+0

Aus irgendeinem seltsamen Grund, bekomme ich die Stack-Trace jetzt an der Konsole. Das Skript arbeitet immer noch mit der von Ihnen vorgeschlagenen [modifizierten] Verbindungszeichenfolge. Ich habe jedoch eine Lösung gefunden. Ich habe MySQLdb auf meinem Linux-Rechner installiert, also werde ich einfach meine CSV-Datei auf meinen Linux-Rechner kopieren und den Datenimport auf meinem Linux-Rechner vornehmen :( – skyeagle

2

nur installieren müssen mysql-connector-odbc-3.51.28-win32.msi.

und pyodbc-2.1.7.win32-py2.7.exe.

natürlich haben Sie fertig MySQL und Python 2.7 installiert.

Beispiel:

import pyodbc 

cndBase = pyodbc.connect("DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost; PORT=3306;DATABASE=nameDBase; UID=root; PASSWORD=12345;") 
ptdBase = cndBase.cursor() 

query_str = 'SELECT* FROM nameTabla;' 
rows = ptdBase.execute(query_str) 

for rw in rows: 
    print list(rw)`enter code here` 
+0

'dBase' ist nicht definiert. Meinst du 'ptdBase'? –

1

Ich hatte diesen gleichen Fehler so ging ich über die ganze Version, die ich für die Verbindung wurde mit. Das habe ich herausgefunden:

Für Python 2.7 32 bit: - pyodbc muss 32bit sein - der DB Treiber muss 32bits sein.(Microsoft Access sollte auch 32 Bit sein)

Für diejenigen, die die 64-Bit-Version verwenden. Sie sollten überprüfen, dass alles auch 64 Bits ist.

In meinem Fall habe ich versucht zu einer Oracle-DB und Microsoft Access DB CONNECTO so hatte ich die folgenden Komponenten die architechture Version entsprechen zu machen:

  • Pyodbc (MS Access)
  • Python
  • cx_Oracle (Oracle Dialekt für sqlalchemy)
  • Oracle instant einfach (Oracle. vergessen Sie nicht die Umgebungsvariable erstellen)
  • py2exe (Making the excecutable app)
0

Ist das Ihr Fahrername richtig?

Sie können überprüfen Sie die Treibernamen in Fenster -> Systemsteuerung -> System und Sicherheit -> Verwaltung -> ODBC-Datenquellen -> Registerkarte Treiber dann kopieren Sie den Flussnamen auf den ersten Parameter

wie

cnxn = pyodbc.connect("DRIVER={MySQL ODBC 5.3 ANSI Driver}; SERVER=localhost;DATABASE=books; UID=root; PASSWORD=password;") 

Und mein Problem gelöst

oder Sie können den Treiber nicht installieren und der Schritt ist einfach.