2012-08-03 4 views
6

Ist es möglich, sqlobject zu verwenden, um eine Verbindung zu einer MySQL-Datenbank von Iron Python herzustellen? Wenn das so ist, wie? Was muss ich installieren?Wie installiere ich sqlobject + mysql auf Iron Python?

Ich habe sqlbject für cpython installiert und es funktioniert gut, aber wenn ich das gleiche Paket in Ironpython verwende bekomme ich "ImportError: Kein Modul namens _mysql". Ich verstehe das so, dass ironpython die C-basierte .dlls nicht laden kann, die für den Zugriff auf die mysql-API notwendig ist. Was ist die Problemumgehung, oder gibt es eine?

+0

, wenn Sie diese [link] check out (http://www.ironpython.info/index. php/Databases_with_Odbc) es zeigt, wie Odbc zu verbinden, aber die Installation ich weiß nicht, ob Sie bereits haben installiert, aber das ist die einzige Lösung, die ich finden konnte. (nur mit MySQL) –

Antwort

-1

Wenn Sie das sehen, ist es wahrscheinlich, Sie haben bei der Installation von MySQLdb etwas falsch gemacht; Read Read (oder Read) README. _mysql ist das Low-Level-C-Modul, das mit der MySQL-Client-Bibliothek verbunden ist.

Verschiedene Versionen von MySQLdb in der Vergangenheit hatten Probleme auf "seltsamen" Plattformen; "Seltsam" bedeutet in diesem Fall "nicht Linux", obwohl es auf Unix/POSIX-Plattformen, einschließlich BSDs und Mac OS X, im Allgemeinen keine Probleme gibt. Windows war problematischer, teilweise weil in der Windows-Installation kein mysql_config verfügbar ist von MySQL. 1.2.1 löst die meisten, wenn nicht alle, dieser Probleme, aber Sie müssen immer noch eine Konfigurationsdatei bearbeiten, damit das Setup weiß, wo MySQL zu finden ist und welche Bibliotheken enthalten sind.

ImportError: libmysqlclient_r.so.14: cannot open shared object file: No such file or directory 

Die Zahl nach .so kann variieren, aber dies bedeutet, dass Sie eine Version von MySQLdb gegen eine MySQL-Version kompiliert haben, und versuchen nun, es gegen eine andere Version zu laufen. Die Shared-Library-Version neigt dazu, zwischen den Hauptversionen zu wechseln.

Lösung: Rebuilt MySQLdb, oder erhalten Sie die passende Version von MySQL.

Eine andere Sache, die dies verursachen kann: Die MySQL-Bibliotheken möglicherweise nicht auf Ihrem Systempfad.

Lösungen:

set the LD_LIBRARY_PATH environment variable so that it includes the path to the MySQL libraries. 

set static=True in site.cfg for static linking 

reconfigure your system so that the MySQL libraries are on the default loader path. In Linux, you edit /etc/ld.so.conf and run ldconfig. For Solaris, see Linker and Libraries Guide. 

ImportError: ld.so.1: python: fatal: libmtmalloc.so.1: DF_1_NOOPEN tagged object may not be dlopen()'ed 

Dies ist ein sonderbarer von Solaris. Was heißt das? Ich habe keine Ahnung. Dies kann jedoch passieren, wenn zwischen Python und MySQL eine Art von Compiler- oder Umgebungskonflikt besteht. Auf einigen kommerziellen Systemen können Sie beispielsweise Code mit einem eigenen Compiler kompilieren und andere Dinge mit GCC kompilieren. Sie sind nicht immer miteinander verbunden. Eine Möglichkeit, dies zu erreichen, besteht darin, Binärpakete von verschiedenen Anbietern zu erhalten.

Lösung: Rebuild Python oder MySQL (oder beide) aus der Quelle.

ImportError: dlopen(./_mysql.so, 2): Symbol not found: _sprintf$LDBLStub Referenced from: ./_mysql.so Expected in: dynamic lookup 

Dies ist einer von Mac OS X. Es scheint ein Compiler Mismatch gewesen zu sein, aber diese Zeit zwischen zwei verschiedenen Versionen von GCC. Es scheint, dass nahezu jede größere Version von GCC die ABI in einigen Fällen ändert, so dass zum Beispiel Linking-Code, der mit GCC-3.3 und GCC-4.0 kompiliert wurde, problematisch sein kann.

+0

-1: Diese Frage bezieht sich speziell auf Ironpython - ich erwähne es im Titel und im ersten Satz. Ihre Antwort tut nichts, um die einzigartige Situation zu behandeln, dieses Modul mit Ironpython zu verwenden –

1

auf dem Quellcode SQLObject Blick ist reiner Python, der Code auf MySQLdb abgehangen, der CPython beschränkt ist.

Allerdings, wenn Sie den Code ändern mysql.connector (http://dev.mysql.com/doc/connector-python/en/index.html) Bibliothek zu verwenden, die in reinem Python geschrieben ist, sollten Sie in der Lage sein, eine Verbindung estanblish

Hinweis mysql: Das mysql.connector folgt nicht dem gleiche api wie MySQLdb und beträchtliche Menge an Umschreiben an die ich glaube, source code

erfordert dies die beste Abhilfe sein kann