Mysql Query

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Klaus

Montag 15. August 2005, 18:27

Hi,
irgendwie such ich schon im Netz wie der der Syntax von Create in Python ist.
Bisherversuch ich so aber es Klappt nicht:

b.query("""CREATE TABLE test (ID INTEGER(3), NAME VARCHAR(5)""");

Wie siehst richtig aus oder wo kann ich mehr dazu lesen?

MFG

Klaus
ProgChild
User
Beiträge: 210
Registriert: Samstag 9. April 2005, 10:58
Kontaktdaten:

Montag 15. August 2005, 18:34

Klaus hat geschrieben:Hi,
irgendwie such ich schon im Netz wie der der Syntax von Create in Python ist.
Bisherversuch ich so aber es Klappt nicht
Python kann SQL nicht verändern. Der SQL Syntax hängt nicht von Python sondern von der verwendeten Datenbank ab.

Hier mal ein kleines Beispiel(ungetestet) mit MySQL:

Code: Alles auswählen

import MySQLdb

connection = MySQLdb.connect(host = db_host, user = db_user, passwd = db_passwd, db = db_name)
			
cursor = connection.cursor()
cursor.execute( 'CREATE TABLE test (ID INTEGER(3), NAME VARCHAR(5) )' )

connection.commit()
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

Dienstag 16. August 2005, 09:02

Klaus hat geschrieben:Wie siehst richtig aus oder wo kann ich mehr dazu lesen?
http://dev.mysql.com/doc/mysql/de/create-table.html
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
Klaus

Dienstag 16. August 2005, 10:51

Hi,

ja soweit ist mir alles klar. Ich nutze allerdings das Modul mysql.

Für ich die query so aus klappt auch alles.

z.B. db.query("CREATE Table (ID INT(3), NAME VARCHAR(8)")

Er erstellt problemlos die Tabelle.

Das Problem ist das ich den query dynamisch erstelle. Und er auf einer Variablen gespeichert ist.
z.B. würde in der Variable S flogendes stehen wenn ich print s ausführe:

"CREATE Table (ID INT(3), NAME VARCHAR(8)"

Und jetzt will ich den query senden mit db.query(s)
Und das ist irgendwie nicht dasselbe. Bekomm jedesmal die Fehlermeldung das de
SQL Syntax nicht korrekt ist.
Ich hoffe ihr konntet mir folgen und habt Rat. Ich probiers schon hin und her aber irgendetwas
überseh ich wohl:)

MFG

Klaus

Edit (Leonidas): Smileys aus Code entfernt.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 16. August 2005, 11:03

Bei dem Create Table scheint die schließende Klammer zu fehlen, oder braucht SQL gar keine solchen Klammern?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 16. August 2005, 11:41

Ganz genau, außerdem fehlt das Semikolon am Ende. So geht's vielleicht besser:

Code: Alles auswählen

CREATE Table (
  `ID` INT(3),
  `NAME` VARCHAR(8)
);

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 16. August 2005, 11:48

Dann müsstest du s so setzen:

Code: Alles auswählen

s = """ CREATE Table (
  `ID` INT(3),
  `NAME` VARCHAR(8)
);"""
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Sarah

Dienstag 16. August 2005, 19:50

Hi,

ja all diese querys hab ich selbst schon ausprobiert und MYsql ist da wohl tolerant und läßt m
meinen und euren Syntax zu.
Allerdings klappts immer noch nicht.
so kommt der fertige query dann an.

s = r.getquery()
db.query(s)

und Prompt kommt der Fehler wegen dem Syntax. Wie gesagt mach ich print s
wird der query ausgegeben den ihr auch schon vorschlagt.
Irgendnen Haken gibs da wohl. Würd ich den den Inhalt von s aus der Shell
Umgebung rauskopieren und db.query(KopierterqueryAusShell) manuell eingeben würds gehen.
würd ich aber direkt db.query(r.getquery()) reinschreiben gehts nicht.
Ich verzweifel echt. Das ist irgend ne kleine Sache nur komm ich nicht drauf.
Ich hoff ihr habt noch nen super Tipp.

MFG

Sarah
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Dienstag 16. August 2005, 20:23

und wenn du print repr(r.getquery()) machst?

was gibt er dann genau aus?

Gruss
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mittwoch 17. August 2005, 06:34

Also ich mach das nicht über db.query() sondern über db.cursor.execute(), halt so:

Code: Alles auswählen

SQLcommand = """ CREATE Table (
  `ID` INT(3),
  `NAME` VARCHAR(8)
);"""
try:
    db.cursor.execute( SQLcommand )
except Exception, e:
    print "Can't create table: '%s'" % e

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Sarah

Mittwoch 17. August 2005, 09:55

Hi,

ja das mit dem print repr(r.get_query()) ist nen guter Tipp.

Was macht repr?

Jetzt ist der query leicht anders und auch falsch. Es kommt raus.

u'""" CREATE TABLE stern (Nummer INTEGER(4), Name VARCHAR(8));"""'

wp kommt das u her? Das ne totale Überraschung?

MFG

Sarah
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 17. August 2005, 10:55

Sarah hat geschrieben:wp kommt das u her? Das ne totale Überraschung?
Das ist ein Unicode-String. Übrigens gibt es neben Unicode Strings auch Raw-Strings.

Versuch mal folgendes:

Code: Alles auswählen

q = r.get_query()
q = q.encode('latin-1')
db.query(q)
Jens hat schon recht, normalerweise nutzt man cursor.execute().
My god, it's full of CARs! | Leonidasvoice vs Modvoice
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Mittwoch 17. August 2005, 10:55

das u heisst, dass es ein Unicode String ist. ich weiss jetzt halt nicht ob mysql unicode ohne probleme frisst.

falls mysql unicode nicht unterstützt (sollte zwar), kannst mal folgendes probieren

Code: Alles auswählen

s = r.getquery() 
db.query(s.encode('latin-1')) 
gruss
kuerbis

Donnerstag 18. August 2005, 16:17

ob latin-1 oder unicode hängt davon, welches Character set du in der MySQL eingestellt hast.
Antworten