Seite 2 von 3
Re: MySQL-Modul in Python 3.6.1 unter OS X wird nicht gefunden
Verfasst: Mittwoch 6. September 2017, 14:24
von __deets__
Keine Ahnung ob sich da jetzt was getan hat. Musst du bei homebrew und/oder PyMySQL nachhaken/schauen. Ich denke mal man koennte auch versuchen das "von Hand" zu machen, und weniger build-Magie verwenden, das ist aber ggf. etwas zu viel des guten fuer jemand unerfahrenen.
Ein Alternative waere aber, gleich auf MySQL zu verzichten. Es mag in Kleinigkeiten unterschiedlich sein, aber wenn du stattdessen entweder auf sqlite (schon eingebaut) oder Postgres setzt, dann sollte das genauso gut gehen. Da musst du ggf. DDL (DataDefinitionLanguage, Statements zum erzeugen von Tabellen) aendern, aber beim SQL selbst (DML, data manipulation language) sollte eigentlich alles gleich bleiben.
Fuer Postgres gibt es mit pg8000 auch einen pure-Python-Connector, der saemtliche Probleme eines binaeren Clients so wie du sie bei mysql vorfindest.
Postgres wuerde ich persoenlich fuer DB-Entwicklung auch eh bevorzugen.
Re: MySQL-Modul in Python 3.6.1 unter OS X wird nicht gefunden
Verfasst: Mittwoch 6. September 2017, 14:57
von Hendy84
Ich möchte am liebsten Schritt für Schritt ein Programm schreiben, mit dem ich auf eine bereits über 10 Jahre alte und inzwischen recht umfangreiche MySQL-Datenbank zugreifen kann, die aktuell via PHP von mir inhaltlich verwaltet wird.
Leider weiß ich nicht, ob der Server theoretisch auch die Datenbank auf ein anderes DB-System migrieren kann, da die MySQL-DB für mich von Freunden auf deren Server gehostet wird.
Aber vielleicht ließe sich ein DB-BackUp ja nach Postgres umziehen, damit ich erstmal via Python und DB-Schnittstelle rumexperimentieren kann, sodass ich in Punkto Datensätze nicht bei Null anfangen muss, sondern auf etwas Bekanntes aufbauen kann.
Werde mich mal etwa in Postgres einlesen...
Re: MySQL-Modul in Python 3.6.1 unter OS X wird nicht gefunden
Verfasst: Mittwoch 6. September 2017, 15:04
von __deets__
Puh, das wuerde ich jetzt nicht unbedingt machen. Wenn du schon etwas existierendes hast, dann solltest du da auch ruhig bei MySQL bleiben.
Dann wuerde ich doch eher Zeit darein investieren, den MySQL Connector zum laufen zu bekommen. Laut Doku kann der auch einen Pure-Modus, ohne C-Code. Das ist vielleicht nur eine Installationshuerde.
Auf meinem Mac gibt' bei brew das hier:
Code: Alles auswählen
$ brew search mysql |grep py
caskroom/cask/mysql-connector-python
Vielleicht klappt's ja damit, statt mit pip.
Re: MySQL-Modul in Python 3.6.1 unter OS X wird nicht gefunden
Verfasst: Mittwoch 6. September 2017, 15:05
von kbr
@Hendy84: wie __deets__ schon schrieb: verwende mit Python SQLite oder für größere Anwendungen Postgres.
Das hilft Dir jetzt natürlich nicht weiter in Bezug auf Dein konkretes Problem, das ich mal kurz nachvollzogen habe:
Installation von MySQL mit brew: "$ brew install mysql" -> installiert mysql-5.7.19
Mit "$ mysql.server start" MySQL starten.
Dann mit "$mysql -u root" in den cli-client gehen und Benutzer und db anlegen (und im richtigen Betrieb auch root absichern).
Environment mit conda anlegen. Z.B. "$ conda create -n mysqltest python=3.6", mit "$ source activate mysqltest" das Environment aktivieren und mit "$ conda install pymysql" PyMySQL installieren (geht auch in einem Schritt beim erstellen des Environments).
Anschließend Python starten:
Code: Alles auswählen
>>> import pymysql
>>> connection = pymysql.connect(host='localhost', user='user', password='the_password', db='dbname')
>>> connection
<pymysql.connections.Connection object at 0x105889f60>
Funktioniert soweit alles einwandfrei.
Re: MySQL-Modul in Python 3.6.1 unter OS X wird nicht gefunden
Verfasst: Mittwoch 6. September 2017, 16:15
von Hendy84
Vielen Dank euch beiden für eure Hinweise - probiere ich heute Abend mal aus!
Re: MySQL-Modul in Python 3.6.1 unter OS X wird nicht gefunden
Verfasst: Samstag 9. September 2017, 11:57
von Hendy84
Hendy84 hat geschrieben:Hab den Befehl jetzt nochmal mit pip3 ausgeführt, Resultat:
Code: Alles auswählen
pip3 install mysqlclient
Collecting mysqlclient
Using cached mysqlclient-1.3.10.tar.gz
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/private/var/folders/22/q7m4hq294z56nt2qvvzy5t8c0000gn/T/pip-build-6ldjweu1/mysqlclient/setup.py", line 17, in <module>
metadata, options = get_config()
File "/private/var/folders/22/q7m4hq294z56nt2qvvzy5t8c0000gn/T/pip-build-6ldjweu1/mysqlclient/setup_posix.py", line 54, in get_config
libraries = [dequote(i[2:]) for i in libs if i.startswith('-l')]
File "/private/var/folders/22/q7m4hq294z56nt2qvvzy5t8c0000gn/T/pip-build-6ldjweu1/mysqlclient/setup_posix.py", line 54, in <listcomp>
libraries = [dequote(i[2:]) for i in libs if i.startswith('-l')]
File "/private/var/folders/22/q7m4hq294z56nt2qvvzy5t8c0000gn/T/pip-build-6ldjweu1/mysqlclient/setup_posix.py", line 12, in dequote
if s[0] in "\"'" and s[0] == s[-1]:
IndexError: string index out of range
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/22/q7m4hq294z56nt2qvvzy5t8c0000gn/T/pip-build-6ldjweu1/mysqlclient/
Jemand 'ne Idee?
Habe die Prozedur jetzt nochmal durchlaufen, und siehe da, dieses Mal gibt es anscheinend keine Fehlermeldungen mehr via pip3 Befehl, sondern:
Code: Alles auswählen
pip3 install mysqlclient
Collecting mysqlclient
Downloading mysqlclient-1.3.12.tar.gz (89kB)
100% |████████████████████████████████| 92kB 592kB/s
Building wheels for collected packages: mysqlclient
Running setup.py bdist_wheel for mysqlclient ... done
Stored in directory: /Users/.../Library/Caches/pip/wheels/df/bb/60/bf7c315cbe163515db1c846e4ffa5557dd785c82e82f3492e8
Successfully built mysqlclient
Installing collected packages: mysqlclient
Successfully installed mysqlclient-1.3.12
Vielleicht funktioniert es ja jetzt ordnungsgemäß, let's see...
Re: MySQL-Modul in Python 3.6.1 unter OS X wird nicht gefunden
Verfasst: Samstag 9. September 2017, 12:17
von Hendy84
Also ich erhalte gerade folgende Fehlermeldung:
Code: Alles auswählen
File "/Users/.../Desktop/Programmieren/DB.py", line 4, in <module>
import mysql.connector
ModuleNotFoundError: No module named 'mysql'
Mein Skript sieht aktuell so aus:
Code: Alles auswählen
import MySQLdb
import sys, _mysql
import mysql.connector
config = {
'user': 'root',
'password': 'root',
'host': 'localhost:8889',
'database': 'inventory',
'raise_on_warnings': True,
}
link = mysql.connector.connect(**config)
try:
connection = mysql.connector.connect \
(host = "localhost:8889", user = "root", passwd = "")
except:
print("Keine Verbindung zum Server")
sys.exit(0)
cursor = connection.cursor()
cursor.execute("CREATE DATABASE IF NOT EXISTS firma")
connection.commit()
cursor.close();
connection.close()
Wo ist mein Denkfehler? Ich dachte, das mysql-Modul sei nun erfolgreich installiert... Oder habe ich noch irgendwas vergessen?
Re: MySQL-Modul in Python 3.6.1 unter OS X wird nicht gefunden
Verfasst: Samstag 9. September 2017, 12:39
von Hendy84
Habe nun alternativ mal probiert, ob es mit PyMySQL klappt.
Installation:
Code: Alles auswählen
pip3 install pymysql
Collecting pymysql
Downloading PyMySQL-0.7.11-py2.py3-none-any.whl (78kB)
100% |████████████████████████████████| 81kB 1.2MB/s
Installing collected packages: pymysql
Successfully installed pymysql-0.7.11
Wenn ich jedoch ein Script laufen lasse, in dem nur "import PyMySQL" steht, kommt als Fehlermeldung:
Code: Alles auswählen
import PyMySQL
ModuleNotFoundError: No module named 'PyMySQL'
Vielleicht bin ich ja gerade betriebsblind...
Re: MySQL-Modul in Python 3.6.1 unter OS X wird nicht gefunden
Verfasst: Samstag 9. September 2017, 12:41
von __deets__
Gleiches Python?
Re: MySQL-Modul in Python 3.6.1 unter OS X wird nicht gefunden
Verfasst: Samstag 9. September 2017, 13:33
von Hendy84
Wie kann ich herausfinden, ob ein anderes Python läuft als das Gewünschte?
Wenn ich im Terminal mit python3 starte, müsste es doch eigentlich die besagte Instanz sein, in der die Module via pip3 installiert wurden, oder? Oder gibt es eine spezifischere Möglichkeit, eine Python-Version zu starten oder zu sehen, welche Module dort bereits erfolgreich installiert wurden?
Re: MySQL-Modul in Python 3.6.1 unter OS X wird nicht gefunden
Verfasst: Samstag 9. September 2017, 13:59
von __deets__
Da kann es schon Unterscheide geben. Je nach Pfad_Variable zB.
Am besten ist du lässt dir mal mit "which pip3" ausgeben, welches pip das war. Daneben sollte dann auch ein Python liegen, und in dessen Site packages sollte das MySQL Paket installiert worden sein.
Re: MySQL-Modul in Python 3.6.1 unter OS X wird nicht gefunden
Verfasst: Samstag 9. September 2017, 14:13
von kbr
Hendy84 hat geschrieben:Wenn ich jedoch ein Script laufen lasse, in dem nur "import PyMySQL" steht, kommt als Fehlermeldung:
Andere Möglichkeit: Python ist case-sensitive und PyMySQL schreibt man klein: 'import pymysql'.
Re: MySQL-Modul in Python 3.6.1 unter OS X wird nicht gefunden
Verfasst: Samstag 9. September 2017, 14:19
von Melewo
Warum bist Du nicht bei import MySQLdb geblieben.
Hendy84 hat geschrieben:Mein Skript sieht aktuell so aus:
Code: Alles auswählen
import MySQLdb
import sys, _mysql
import mysql.connector
config = {
'user': 'root',
'password': 'root',
'host': 'localhost:8889',
'database': 'inventory',
'raise_on_warnings': True,
}
link = mysql.connector.connect(**config)
try:
connection = mysql.connector.connect \
(host = "localhost:8889", user = "root", passwd = "")
except:
print("Keine Verbindung zum Server")
sys.exit(0)
cursor = connection.cursor()
cursor.execute("CREATE DATABASE IF NOT EXISTS firma")
connection.commit()
cursor.close();
connection.close()
Re: MySQL-Modul in Python 3.6.1 unter OS X wird nicht gefunden
Verfasst: Samstag 9. September 2017, 15:38
von Melewo
Also, das verstehe ich nicht alles, was der schreibt, vielleicht bringe ich da auch etwas durcheinander, doch anschauen kannst Du es Dir ja einmal:
http://www.seanbehan.com/install-mysqld ... -mac-os-x/
Und OS X habe ich zwar nicht, doch sollte nicht wenigstens der Import einheitlich sein und der ist bei mir "import MySQLdb" und nicht "import PyMySQL".
Hendy84 hat geschrieben:Wenn ich jedoch ein Script laufen lasse, in dem nur "import PyMySQL" steht, kommt als Fehlermeldung:
Code: Alles auswählen
import PyMySQL
ModuleNotFoundError: No module named 'PyMySQL'
Re: MySQL-Modul in Python 3.6.1 unter OS X wird nicht gefunden
Verfasst: Samstag 9. September 2017, 16:38
von Sirius3
@Hendy84: wenn Du mysqlclient verwendest, dann heißt das Paket »MySQLdb« (das Du ja auch importierst) und nicht »mysql«. »_mysql« solltest Du auch nicht importieren, weil der Unterstrich zeigt, dass das nur für den internen Gebrauch gedacht ist.
Wenn Du PyMySQL verwenden willst, heißt es »import pymysql«.
Zu Deinem Code: Warum rufst Du connector.connect zweimal auf? Nutze niemals nackte excepts. Dadurch wird wirklich jeder Fehler verschluckt, so dass man gar nicht herausfinden kann, was denn nun falsch ist.
Re: MySQL-Modul in Python 3.6.1 unter OS X wird nicht gefunden
Verfasst: Samstag 9. September 2017, 16:47
von Hendy84
Ich hatte mir online ein Tutorial gesucht:
https://www.tutorialspoint.com/python3/ ... access.htm
Dort schrieben sie als Beispielcode zum ersten Aufrufen:
Da hab ich mir anscheinend kein gutes Tutorial rausgesucht, wenn die schon so einfache Sachen wie Groß/Kleinschreibung in ihren Beispielcodes falsch machen - so macht man dann als Anfänger gleich die Fehler nach und wundert sich, warum es nicht funktioniert.
Also danke für den Tipp! Werde ich gleich nochmal ausprobieren.
Re: MySQL-Modul in Python 3.6.1 unter OS X wird nicht gefunden
Verfasst: Samstag 9. September 2017, 17:00
von Sirius3
@Hendy84: ja das ist ein sehr schlechtes Tutorial. Nackte excepts, Stringformatierung mit SQL-Statements, etc, etc. Am besten nicht lesen. Da mußt Du Dir danach wieder so viel abgewöhnen.
Das wichtigste steht eigentlich schon in der
PyMySQL-Dokumentation.
Re: MySQL-Modul in Python 3.6.1 unter OS X wird nicht gefunden
Verfasst: Sonntag 10. September 2017, 18:48
von Hendy84
Ich habe jetzt mal Folgendes versucht:
Code: Alles auswählen
import MySQLdb
import pymysql
import sys
conn = pymysql.connect(host='localhost', port=8889, user='root', password='root', db='inventory')
cur = conn.cursor()
cur.execute("SELECT * FROM users")
print(cur.description)
print()
for row in cur:
print(row)
cur.close()
conn.close()
Als Ergebnis erhalte ich:
Code: Alles auswählen
Traceback (most recent call last):
File "/Users/.../Desktop/Programmieren/DB.py", line 9, in <module>
cur.execute("SELECT * FROM users")
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/cursors.py", line 166, in execute
result = self._query(query)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/cursors.py", line 322, in _query
conn.query(q)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 856, in query
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 1057, in _read_query_result
result.read()
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 1340, in read
first_packet = self.connection._read_packet()
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 1014, in _read_packet
packet.check_error()
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/connections.py", line 393, in check_error
err.raise_mysql_exception(self._data)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymysql/err.py", line 107, in raise_mysql_exception
raise errorclass(errno, errval)
pymysql.err.ProgrammingError: (1146, "Table 'inventory.users' doesn't exist")
Immerhin gibt er jetzt nicht mehr den Fehler aus, dass das Modul nicht installiert sei, trotzdem sagen mir die Fehlermeldungen erst einmal nichts - außer natürlich ganz unten, dass die Tabelle users in der Datenbank inventory nicht exisitert (weil besagte DB namens inventory aktuell noch leer, ohne jegliche Tabellen ist).
Re: MySQL-Modul in Python 3.6.1 unter OS X wird nicht gefunden
Verfasst: Montag 11. September 2017, 05:33
von Melewo
Hendy84 hat geschrieben:Ich habe jetzt mal Folgendes versucht:
Du solltest nur das importieren, was Du verwenden möchtest.
Wie Du richtig erkannt hast, lässt sich nur eine bereits angelegte und mit ein paar Daten gefüllte Tabelle abfragen. Also anlegen, füllen, abfragen, nicht umgekehrt.
Falls danach alles laufen sollte, so wäre es auch nicht verkehrt, wenn Du den nach Dir kommenden Ratsuchenden den einen oder anderen Hinweis hinterlassen würdest, welche Schritte bei Dir zu einer erfolgreichen Installation unter OS X führten.
Re: MySQL-Modul in Python 3.6.1 unter OS X wird nicht gefunden
Verfasst: Montag 11. September 2017, 07:25
von snafu
Hendy84 hat geschrieben:Code: Alles auswählen
(...)
pymysql.err.ProgrammingError: (1146, "Table 'inventory.users' doesn't exist")
Immerhin gibt er jetzt nicht mehr den Fehler aus, dass das Modul nicht installiert sei, trotzdem sagen mir die Fehlermeldungen erst einmal nichts - außer natürlich ganz unten, dass die Tabelle users in der Datenbank inventory nicht exisitert (weil besagte DB namens inventory aktuell noch leer, ohne jegliche Tabellen ist).
Alles andere gehört zum sogenannten Traceback. Das ist der Aufrufverlauf, der am Ende in den Fehler gemündet hat. In der ersten Zeile findest du deinen eigenen Aufruf und danach quasi was er bewirkt hat. Tracebacks sind sehr hilfreich, wenn man eigene Programme mit hintereinander geschalteten Aufrufen hat (was ja die Regel ist) und die Fehlerursache im eigenen Programm finden will oder wenn man fremde fehlerhafte Programme debuggen muss. In deinem Fall ist es so, dass in einer leeren Tabelle eben keine Abfragen gemacht werden können. Das ist also sozusagen ein geplanter Fehler: Die Bibliothek selbst ist in Ordnung, der Feher liegt beim Benutzer.