Python a MySQL – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Python a MySQL – Python – Fórum – Programujte.comPython a MySQL – Python – Fórum – Programujte.com

 

tonda0
Duch
21. 1. 2007   #1
-
0
-

Zdravím všechny,

potřeboval bych pomoc s komunikací mezi pythonem a MySQL databází.
Zkouším na to už druhý víkend dojít a pořád nic.

tady je kod a pod tím přikládám hlášku z IDLe pythonu.

from Tkinter import *

import tkFileDialog
import tkMessageBox
import time
import MySQLdb

def pridaniZakaznika2():
db=MySQLdb.connect(user="root",passwd="root")
c=db.cursor()
c.execute("USE ahoj;")
c.execute("CREATE TABLE zakaznici (ahoj VARCHAR(40),nazdar VARCHAR(49),ID INT NOT NULL AUTO_INCREMENT,PRIMARY KEY(ID));")
jmeno2=jmeno.get()
mesto2=mesto.get()
c.execute("SET NAMES 'cp1250';")
c.execute("INSERT INTO zakaznik(ststeel,akimex)VALUES('"+jmeno2+"','"+mesto2+"');")
c.execute("SET NAMES 'cp852';")
c.execute("SELECT*FROM zakaznik;")

for i in c.fetchall():
print i[0]
print i[1]
print i[2]


a tady je hláška chyby:

Exception in Tkinter callback

Traceback (most recent call last):
File "C:\Python24\lib\lib-tk\Tkinter.py", line 1345, in __call__
return self.func(*args)
File "C:\Python24\testovaci\podokno_stelc.pyw", line 12, in pridaniZakaznika2
c.execute("CREATE TABLE zakaznici (ahoj VARCHAR(40),nazdar VARCHAR(49),ID INT NOT NULL AUTO_INCREMENT,PRIMARY KEY(ID));")
File "C:\Python24\Lib\site-packages\MySQLdb\cursors.py", line 163, in execute
self.errorhandler(self, exc, value)
File "C:\Python24\Lib\site-packages\MySQLdb\connections.py", line 35, in defaulterrorhandler
raise errorclass, errorvalue
OperationalError: (1005, "Can't create table '.\\ahoj\\zakaznici.frm' (errno: 121)")


mockrát děkuji všem za rady. doufám že se můj problém rozlouskne.

Tonda
icq: 239539413

Nahlásit jako SPAM
IP: ...–
tonda0
Duch
23. 1. 2007   #2
-
0
-

jahoda píše:#
# Zdravím všechny,#
##
#potřeboval bych pomoc s komunikací mezi pythonem a MySQL databází.#
#Zkouším na to už druhý víkend dojít a pořád nic.#
##
#tady je kod a pod tím přikládám hlášku z IDLe pythonu.#
##
#

from Tkinter import *#
#import tkFileDialog#
#import tkMessageBox#
#import time#
#import MySQLdb#
##
#def pridaniZakaznika2():#
# db=MySQLdb.connect(user="root",passwd="root")#
# c=db.cursor()#
# c.execute("USE ahoj;")#
# c.execute("CREATE TABLE zakaznici (ahoj VARCHAR(40),nazdar VARCHAR(49),ID INT NOT NULL AUTO_INCREMENT,PRIMARY KEY(ID));")#
# jmeno2=jmeno.get()#
# mesto2=mesto.get()#
# c.execute("SET NAMES ##uvozovka##cp1250##uvozovka##;")#
# c.execute("INSERT INTO zakaznik(ststeel,akimex)VALUES(##uvozovka##"+jmeno2+"##uvozovka##,##uvozovka##"+mesto2+"##uvozovka##);")#
# c.execute("SET NAMES ##uvozovka##cp852##uvozovka##;")#
# c.execute("SELECT*FROM zakaznik;")#
# #
# for i in c.fetchall():#
# print i[0]#
# print i[1]#
# print i[2]
#
##
#a tady je hláška chyby:#
##
#
Exception in Tkinter callback#
#Traceback (most recent call last):#
# File "C:Python24liblib-tkTkinter.py", line 1345, in __call__#
# return self.func(*args)#
# File "C:Python24 estovacipodokno_stelc.pyw", line 12, in pridaniZakaznika2#
# c.execute("CREATE TABLE zakaznici (ahoj VARCHAR(40),nazdar VARCHAR(49),ID INT NOT NULL AUTO_INCREMENT,PRIMARY KEY(ID));")#
# File "C:Python24Libsite-packagesMySQLdbcursors.py", line 163, in execute#
# self.errorhandler(self, exc, value)#
# File "C:Python24Libsite-packagesMySQLdbconnections.py", line 35, in defaulterrorhandler#
# raise errorclass, errorvalue#
#OperationalError: (1005, "Can##uvozovka##t create table ##uvozovka##.\ahoj\zakaznici.frm##uvozovka## (errno: 121)")
#
##
#mockrát děkuji všem za rady. doufám že se můj problém rozlouskne.#
##
#Tonda #
#icq: 239539413

Nahlásit jako SPAM
IP: ...–
Jakub0
Super člen
25. 1. 2007   #3
-
0
-

Pastni jsem prosím víc kódu, z té chybové hlášky fakt nejsem schopný vygenerovat původní kód, tuším, že bude chyba v SQL dotazu, pravděpodobně se snažíš vytvořit tu samou tabulku vícekrát než jednou(ač tomu chybové hlášení zcela neodpovídá), proto bych doporučil přidat "IF NOT EXISTS" nebo ji smazat a pak až vytvořit. Jinak zásadní chybu v té fci nevidím, až na nesmyslné nastavavání SET NAMES ... 2x a dotazy by mohly být psané čitelněji, vyjímku vyvoláš až ji zavoláš miminálně 2x(to opětovné vytvoření tabulky).

Nahlásit jako SPAM
IP: ...–
Věřím, že můžete v životě získat všechno, co budete chtít, když budete pomáhat druhým lidem, aby dostali to, co si přejí oni. - Zig Ziglar TOPlist
tonda0
Duch
28. 1. 2007   #4
-
0
-

dobrá tady je celej kod a můžeš ho ozkoušet:

# -*- coding: cp1250 -*-

from Tkinter import *
import tkFileDialog
import tkMessageBox
import time
import MySQLdb

def pridaniZakaznika2():
db=MySQLdb.connect(user="root",passwd="root")
c=db.cursor()
c.execute("USE ahoj;")
c.execute("CREATE TABLE zakaznici (ahoj VARCHAR(40),nazdar VARCHAR(49),ID INT NOT NULL AUTO_INCREMENT,PRIMARY KEY(ID));")
jmeno2=jmeno.get()
mesto2=mesto.get()
c.execute("SET NAMES 'cp1250';")
c.execute("INSERT INTO zakaznik(ststeel,akimex)VALUES('"+jmeno2+"','"+mesto2+"');")
c.execute("SET NAMES 'cp852';")
c.execute("SELECT*FROM zakaznik;")

for i in c.fetchall():
print i[0]
print i[1]
print i[2]

def storno():
podokno2.destroy()

podokno2=Tk()
podokno2.resizable(0,0)
ramecek1=Frame(podokno2)
ramecek2=Frame(podokno2)
ramecek3=Frame(podokno2)
ramecek4=Frame(podokno2)
napis1=Label(ramecek1, text=u"Jmeno zákazníka:")
jmeno=Entry(ramecek2,font="Arial 10")

napis2=Label(ramecek1,text=u"Město:")
mesto=Entry(ramecek2,font="Arial 10")

napis3=Label(ramecek1,text="Ulice:")
ulice=Entry(ramecek2,font="Arial 10")

napis4=Label(ramecek1,text=u"Počet kilometrů z Brna a zpět:")
kilometry=Entry(ramecek2,font="Arial 10", width=5)

napis5=Label(ramecek1,text=u"Čas na cestě v hodinách")
cas=Entry(ramecek2,font="Arial 10", width=5)

tlacitko1= Button(ramecek3, text=u'Přidej zákazníka',font="Arial 12 bold", command=pridaniZakaznika2,width=13, height=2)
tlacitko2= Button(ramecek3, text=u"Storno", font="Arial 12 bold underline", command=storno,width=13, height=2)

ramecek1.pack(side=LEFT, fill=X)
napis1.pack(fill=Y)
napis2.pack(fill=Y)
napis3.pack(fill=Y)
napis4.pack(fill=Y)
napis5.pack(fill=Y)

ramecek2.pack(side=LEFT, fill=X)
jmeno.pack(fill=Y)
mesto.pack(fill=Y)
ulice.pack(fill=Y)
kilometry.pack(fill=Y)
cas.pack(fill=Y)

ramecek3.pack(side=LEFT, fill=X)
tlacitko1.pack(fill=Y)
tlacitko2.pack(fill=Y)
ramecek4.pack(fill=Y)
podokno2.mainloop()


a uvidíš co ti to hodí za chybu.
s tím set names - to jsem opsal z návodu na netu.
opravdu bych byl moc vděčný kdyby mi někdo poradil. protože jsem se tady na tom zasekl a nemůžu na to dojít

mockrát díky
tony

Nahlásit jako SPAM
IP: ...–
Jakub0
Super člen
28. 1. 2007   #5
-
0
-

Chtěl jsem původně napsat funkční kód, ale pak jsem zjistil:
1) Ujasni si co vlastně chceš
2) Nešachuj s 2 charsety
3) Připoj se hned na začátku skriptu, vyber databázi, vytvoř tabulky, které okořeníš IF NOT EXISTS, DEFAULT CHARACTER SET a COLLATION, a nastav správně kódování klienta(nejlépe utf8).
4) Udělej kód čitelnějším
5) Aplikace se pravděpodobně rozroste, proto bych jí vdechnul OOP
6) Pro případné uživatele(né pro vývojáře) bych skryl konzoli(umím to jen tím, že to spustím přes pythonw.exe) nebo vypínal sys.exit(), zavírat 2x je otrava.

Otázka pro Geona: Prosím tě jak jinak skrýt okno konzole, než .py program spustit manuálně přes pythonw.exe? Případně jak se nějak kultivovaně spustit z toho programu samotného, páč když udělám přes os.system(), firewall se optá jestli se to má opravdu spustit. Děkuji pěkně.

Nahlásit jako SPAM
IP: ...–
Věřím, že můžete v životě získat všechno, co budete chtít, když budete pomáhat druhým lidem, aby dostali to, co si přejí oni. - Zig Ziglar TOPlist
geon0
Grafoman
28. 1. 2007   #6
-
0
-

Prosím tě jak jinak skrýt okno konzole, než .py program spustit manuálně přes pythonw.exe?
*.pyw?

Případně jak se nějak kultivovaně spustit z toho programu samotného, páč když udělám přes os.system(), firewall se optá jestli se to má opravdu spustit.
Snad http://www.py.cz/SpousteniExternichProgramu ? - ale to jsem nikdy neřešil, asi jsem měl slabé firewally ;-)

Nahlásit jako SPAM
IP: ...–
geon. volume doprava.
Jakub0
Super člen
28. 1. 2007   #7
-
0
-

geon píše:#
# Prosím tě jak jinak skrýt okno konzole, než .py program spustit manuálně přes pythonw.exe?#
#*.pyw?


Jo tak jsem nevěděl, že když to přejmenuješ na *.pyw, tak se to spustí bez konzole automaticky v pythonw.exe. Díky moc. :)

Nahlásit jako SPAM
IP: ...–
Věřím, že můžete v životě získat všechno, co budete chtít, když budete pomáhat druhým lidem, aby dostali to, co si přejí oni. - Zig Ziglar TOPlist
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 5 hostů

Podobná vlákna

Python-zavirani oken v python shell — založil Daniel zita

C++ >> Python — založil Ondra

Python? — založil Honza

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý