Hallo Ihr Lieben
sry bin leider eine schlechte Anfängerin... und mein DEUTSCH ich auch ne besonderes gut:
ich versuch grad eine datenbank zu programmieren. Ich benutze dafür MySQL/Python. Die verbindung zu der DB ist schon da und nun möchte ich die DB mit MySQL-Befehle befüllen!
.
.
.
Cursor.execute("INSERT INTO person (name, alter, lEssen, Grosse,...) VALUES( 'ben','55','pizza','170')")
<-- sowas ähnlich aber die VALUES muss ich erst von mein GUI lesen und dann in die DB speichern.
Wisst Ihr vllt ob es DB-Beispiele gibt?
vielen dank!
Gruß,
fanus
MySQL_Python Datenbank befüllen
Für einen knappen Einstieg mit MySQLdb ist dieser Artikel hoffentlich auch für dich hilfreich.
erstmal vielen dank für die antwort..
nun hab ich wieder ein kleines problem:
mit diesem prg wird zwar die Tabelle in der DB erstellt aber keine eingaben dazu eingefügt... also leere tabelle obwohl ich den befehl "insert into" benutzt habe....
vielen dank für Eure hilfe!
# import MySQL module
import MySQLdb
# get user input
name = raw_input("Please enter a name: ")
species = raw_input("Please enter a species: ")
try:
db = MySQLdb.connect (host = "ddd9",
user = "dddi",
passwd = "****",
db = "ddd")
print "ok!"
except MySQLdb.Error, e:
print "Error %d: %s" % (e.args[0], e.args[1])
sys.exit (1)
# create a cursor
cursor = db.cursor()
# execute SQL statement
cursor.execute("Create Table animals (name TEXT, species TEXT)")
cursor.execute("INSERT INTO animals (name, species) VALUES (%s, %s)",
(name, species))
nun hab ich wieder ein kleines problem:
mit diesem prg wird zwar die Tabelle in der DB erstellt aber keine eingaben dazu eingefügt... also leere tabelle obwohl ich den befehl "insert into" benutzt habe....
vielen dank für Eure hilfe!
# import MySQL module
import MySQLdb
# get user input
name = raw_input("Please enter a name: ")
species = raw_input("Please enter a species: ")
try:
db = MySQLdb.connect (host = "ddd9",
user = "dddi",
passwd = "****",
db = "ddd")
print "ok!"
except MySQLdb.Error, e:
print "Error %d: %s" % (e.args[0], e.args[1])
sys.exit (1)
# create a cursor
cursor = db.cursor()
# execute SQL statement
cursor.execute("Create Table animals (name TEXT, species TEXT)")
cursor.execute("INSERT INTO animals (name, species) VALUES (%s, %s)",
(name, species))
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Liegt wohl daran, dass da keiner ist. Dafür rot gefärbter Code, der nicht eingerückt ist. Merke: rote Farbe ersetzt keine Einrückung. Tip: Dafür gibt es extra BBCodes die sogar noch ihre eigenen Buttons haben.BlackJack hat geschrieben:Ich sehe da nirgends ein `commit()` auf dem Verbingsobjekt!?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Dafür haben wir doch einen Prima FAQ Eintrag: http://www.python-forum.de/faq.php#21
Nicht labern, machen.
Ich würde jetzt erstmal den Code auftrennen. Das Anlegen der Tabelle scheint ja funktioniert zu haben. Alles dafür würde ich in ein separates Skript verlagern oder auskommentieren, damit das nicht jedes Mal auf's neue ausgeführt wird (und ggf. Probleme verursacht). Nach dem ersten Aufruf gilt es natürlich zu prüfen, ob die Tabelle wirklich angelegt wurde.
Anschließend würde ich zunächst von `raw_input` Abstand nehmen und direkt Strings als INSERT-Parameter übergeben, um auch da andere Fehlerquellen auszuschließen.
Erscheint denn ein Fehler-Traceback? Evtl. bietet es sich ja auch an, den try-except-Block auf den restlichen Code auszuweiten, in dem der DB-Cursor verwendet wird.
Update:
PEP 249 besagt:
Hm, selbst in (sehr!) altem Code von mir finde ich keine expliziten Commits, aber auch keine Aktivierung von Auto-committing. Konfigurationsoptionen seitens des MySQL-Servers, die die Commits irgendwie einschränken, müsste man prüfen, halte ich aber für sehr unwahrscheinlich.
Ein ``.commit()`` habe ich bei direkter Benutzung von MySQLdb meines Wissens auch nie gemacht. Ebenso wird es im Artikel nicht erwähnt. Eine Transaktion ist hier auch nicht im Spiel. (Das erklärt möglicherweise, dass ich mit direktem SQLAlchemy bisher stellenweise etwas überfordert/verwirrt war, weil man da wohl durchaus Commits macht, wenngleich die teilweise mit der Session o.ä. zusammenhängen... whatever.)fanus hat geschrieben:Code: Alles auswählen
# import MySQL module import MySQLdb # get user input name = raw_input("Please enter a name: ") species = raw_input("Please enter a species: ") try: db = MySQLdb.connect (host = "ddd9", user = "dddi", passwd = "****", db = "ddd") print "ok!" except MySQLdb.Error, e: print "Error %d: %s" % (e.args[0], e.args[1]) sys.exit (1) # create a cursor cursor = db.cursor() # execute SQL statement cursor.execute("Create Table animals (name TEXT, species TEXT)") cursor.execute("INSERT INTO animals (name, species) VALUES (%s, %s)", (name, species))
Ich würde jetzt erstmal den Code auftrennen. Das Anlegen der Tabelle scheint ja funktioniert zu haben. Alles dafür würde ich in ein separates Skript verlagern oder auskommentieren, damit das nicht jedes Mal auf's neue ausgeführt wird (und ggf. Probleme verursacht). Nach dem ersten Aufruf gilt es natürlich zu prüfen, ob die Tabelle wirklich angelegt wurde.
Anschließend würde ich zunächst von `raw_input` Abstand nehmen und direkt Strings als INSERT-Parameter übergeben, um auch da andere Fehlerquellen auszuschließen.
Erscheint denn ein Fehler-Traceback? Evtl. bietet es sich ja auch an, den try-except-Block auf den restlichen Code auszuweiten, in dem der DB-Cursor verwendet wird.
Update:
PEP 249 besagt:
Also hab ich da was im Artikel überlesen oder es fehlt da.Connection Objects
.commit()
Commit any pending transaction to the database. Note that
if the database supports an auto-commit feature, this must
be initially off. An interface method may be provided to
turn it back on.
Database modules that do not support transactions should
implement this method with void functionality.
Hm, selbst in (sehr!) altem Code von mir finde ich keine expliziten Commits, aber auch keine Aktivierung von Auto-committing. Konfigurationsoptionen seitens des MySQL-Servers, die die Commits irgendwie einschränken, müsste man prüfen, halte ich aber für sehr unwahrscheinlich.
`connection.commit()` wird ganz unten in dem Artikel erwähnt.
Früher konnte MySQL keine Transaktionen, damit konnten die auch nicht PEP-Konform sein weil man ja keine Wahl hatte das Autocommit abzustellen. Mittlerweile bietet aber auch MySQL Datenbanken mit Transaktionen und da würde ich mal erwarten, das sich das Modul an die DB API 2.0 hält und Autocommit ausgeschaltet ist wenn das möglich ist.
Früher konnte MySQL keine Transaktionen, damit konnten die auch nicht PEP-Konform sein weil man ja keine Wahl hatte das Autocommit abzustellen. Mittlerweile bietet aber auch MySQL Datenbanken mit Transaktionen und da würde ich mal erwarten, das sich das Modul an die DB API 2.0 hält und Autocommit ausgeschaltet ist wenn das möglich ist.