Witaj
Gość

Wątek: Programowanie w Pythonie problem  (Przeczytany 1415 razy)

  • Wiadomości: 155

  • Pochwał: 0

    • O mnie :)
Programowanie w Pythonie problem
« dnia: Maj 25, 2011, 09:08:23 am »
Wszystko śmiga lecz jak obejść by nie krzyczało mi ze ta tabela o tej nazwie jest zajęta a nie chce jej dropowac co chwile.

PS: żeby nie było najpierw przeszukuje google, a potem pytam :)

cur.execute("CREATE TABLE Kobieta (Wzrost varchar, Wiek varchar, Plec varchar, BMI varchar, zawartosc_tluszczu varchar);")
psycopg2.ProgrammingError: relation "kobieta" already exists

EDIT:
Oraz mam pytanie, jak wstawić podaną zmienna (typu wzrost, wagę, wiek, pleć, wyliczone BMI oraz zawartość tłuszczu) w tabele ?
Chodzi o to ze gdy ktoś poda te dane i na końcu potwierdzi że chce wstawić swoje dane do naszej bazy by wstawiło te że podane dane w tabele.
Jest takie coś możliwe ? Oraz w komentarzach zadałem dodatkowe nurtujące mnie pytania.

aktualnie Kod wygląda tak:
#-*- coding: utf-8 -*-
#importowanie potrzebnych bibliotek
from easygui import *
import psycopg2
import sys
#praca na bazie danych
try:
conn = psycopg2.connect("dbname='****' user='****' host='****' password='****'");
except:
msg_error = "Błąd - Nie moge polaczyć sie z bazą!!"
title_error = "Błąd - Nie moge polaczyć sie z bazą!!"
msgbox(msg_error, title_error, ok_button="OK")
cur = conn.cursor()
cur.execute("CREATE TABLE BMI (Wzrost varchar NOT NULL, Wiek varchar NOT NULL, Plec varchar NOT NULL, BMI varchar NOT NULL, Zawartosc_Tluszczu varchar NOT NULL);")
conn.commit()
#wybor programu lub wczytanie danych z bazy
msg_choice = "Mam uruchomić program czy wczytać dane z bazy online?"
title_choice = "Co chcesz uruchomić ?"
choices_choice = ["Program", "Baza"]
choice = choicebox(msg_choice, title_choice, choices_choice)
#baza
#program
# TĄ CZĘŚĆ KODU(W DÓŁ) CHCIAŁ BYM ZAPISAĆ JAKO FUNKCJE KTÓRĄ BEDE CHCIAŁ WYWOŁAĆ WYŻEJ W WYBORZE CZY ODPALIĆ PROGRAM CZY WCZYTAĆ Z BAZY LECZ NIE WIEM JAK TO ZROBIĆ.
# PODOBNIE WYŻEJ BEDE CHIAŁ ZDEFINIOWAC FUNKCJE BAZA I TAK SAMO WYWOLAC JA WYZEJ PRZY WYBOZE.
msg = "Sprawdz swoje BMI oraz zawartość tkanki tłuszczowej"
title = "Kalkulator BMI (Body Mass Index) oraz zawartość tkanki tłuszczowej"
fieldNames = ["Podaj swoją wagę [kg]", "Podaj swój wzrost [cm]", "Podaj swój wiek", "Podaj swoja pleć [M = Mężczyzna] [K = Kobieta]"]
fieldValues = []
fieldValues = multenterbox(msg, title, fieldNames)
#wczytywanie dancyh
weight = float(fieldValues[0])
growth = float(fieldValues[1])
age = float(fieldValues[2])
sex = fieldValues[3]
if fieldValues[3]=="k":
sex = 1
else: 
sex = 0
#podstawianie pod wzór
BMI = float(weight)/(float(growth)*float(growth)/10000)
BMI = round(BMI*10)/10
FAT = (1.2*BMI) + (0.23*age) - (10.8*sex) - 5.4
#wyprowadzanie wyniku
if BMI < 18.5:
msg1 = "Twoje BMI wynosi: " + str(BMI)+ ", zawartość tłuszczu wynosi: " + str(FAT)+ " % Jesteś zbyt chudy/a jak na swój wzrost. Czy chesz wczytać swój wynik do naszej bazy ?"
choices = ["Tak", "Nie"]
choice = choicebox(msg1, title, choices)
#if choices =="Tak"
#i tu nie wiem czy dobrze robie ? i jak w VALUES zdefiniować te zmienne
#cur.execute("INSERT INTO BMI (Wzrost, Wiek, Plec, BMI, Zawartosc_Tluszczu) VALUES(%s, %s)"
#else:
# sys.exit(0)
elif BMI>25:
msg1 = "Twoje BMI wynosi: " + str(BMI)+ ", zawartość tłuszczu wynosi: " + str(FAT)+ "% Jak na swój wzrost to powinieneś/powinnaś schudnąć. Czy chesz wczytać swój wynik do naszej bazy ?"
choices = ["Tak", "Nie"]
choice = choicebox(msg1, title, choices)
else:
msg1 = "Twoje BMI wynosi: " + str(BMI)+ ", zawartość tłuszczu wynosi: " + str(FAT)+ "% Z twoją wago jest wszystko w porządku. Czy chesz wczytać swój wynik do naszej bazy ?"
choices = ["Tak", "Nie"]
choice = choicebox(msg1, title, choices)
« Ostatnia zmiana: Maj 25, 2011, 09:53:50 am wysłana przez AnDrIx »


  • Wiadomości: 856

  • Pochwał: 9

  • AWTHPW
Odp: Programowanie w Pythonie problem
« Odpowiedź #1 dnia: Maj 26, 2011, 10:48:35 pm »
Zrób sobie sprawdzanie - jak bazy nie ma to załóż nową, a jak jest to UPDATE TABLE czy tam ALTER TABLE, nie pamiętam dawno nie używałem SQLa. Przydałoby się jakieś ID w niej.

Z tą funkcją trochę nie kumam - napisałeś sporo kodu z mysqlem, a nie wiesz jak funkcję zdefiniować?:D
def NazwaFunkcji(argumentyFunkcji):
     kod
     ....
     return wynik / lub bez return

Kodu za dokładnie nie przeglądałem nie chciało mi się szczerze mówiąc, bo pisałem program 2 ostatnie dni w Pythonie właśnie i to mnie zaciekawiło, że ktoś jednak go używa, mój ulubiony język :P Może mi się zachce to pomogę bardziej praktycznie o ile to jeszcze aktualne.

//Acid -- Plusik na prośbę autora tematu.
« Ostatnia zmiana: Czerwiec 04, 2011, 09:13:31 am wysłana przez Acid »

We ride together, we die together.


  • Wiadomości: 155

  • Pochwał: 0

    • O mnie :)
Odp: Programowanie w Pythonie problem
« Odpowiedź #2 dnia: Maj 26, 2011, 11:21:54 pm »
Jezu dzięki :) już  coś mam. Nie nie potrafię bo nie wiem nie kumam a dodatkowo nie pamiętam nic z tego z wykładów, a prowadzącego mam takiego. Jak macie jakieś pytanie pytajcie, no to go pytam a on z tekstem ale dlaczego Pan tego nie mumie czy nie rozumie przecież było to na wykładzie. Klucz do tej bazy jest nie potrzebny bo to będzie tylko jedna tabelka, bynajmniej tak mi się wydaje , że nie będzie to potrzebne.
Dlaczego w mysql ? :p wszystko co to pod sql'a.  Jak byś mi był wstanie pomóc w jaki kol wiek przy tym projekcie np przez gg czy TS3 :P jakoś się odwdzięczę :]

Python fajny język lepszy od C to na pewno co miałem semestr temu :D (ale zaliczyłem na 3.5 hehe)


EDIT:
Przysiedziałem teraz trochę pomyślałem. Ale widzisz teraz tak czy argumenty funkcji to są argumenty danej bazy. Tak jak w przypadku bazy easygui
msg=
title=
itp.
oraz w przypadku psycopg2
cur.execute
itp.
Od razu dodam nie jestem dobrym programistą wiem tyle o ile, w niczym mi nikt nie pomagał, nie jestem też jak kolędy z uczelni co ściągnęli sobie z jakiegoś forum kod i podają go jako swój, chce napisać coś sam. Lecz teraz stanąłem w martwym punkcie. Mam napisane to na innych forach to olewają mnie ciepłym moczem. Większość ludzi tam jest zdania ja jestem -_-' programistą ogarniam to, i mój cennik wiec się pytam poco jest forum o programowaniu skoro takie jest podejście ludzi?!
« Ostatnia zmiana: Maj 26, 2011, 11:48:29 pm wysłana przez AnDrIx »


  • Wiadomości: 391

  • Pochwał: 10

Odp: Programowanie w Pythonie problem
« Odpowiedź #3 dnia: Maj 27, 2011, 08:52:06 am »
Zauważ, że dane otrzymane od użytkownika, to po prostu Stringi. Powiedzmy, że zwalidowałeś formularz i wszystko jest ok. Skoro użytkownik podał swoje daje do formularza, to po prostu wyciągnij je, i wstaw do zapytania. 

Za każdym razem kiedy włączysz program, to będziesz tworzyć swoją tabele ?
Cytuj
cur.execute("CREATE TABLE Kobieta (Wzrost varchar, Wiek varchar, Plec varchar, BMI varchar, zawartosc_tluszczu varchar);")
psycopg2.ProgrammingError: relation "kobieta" already exists
Rozłóż sobie to na mniejsze funkcje. Niech 4 będą odpowiedzialne za operacje Create,Read,Update,Delete. Kolejne funkcje każda osobno, do wyliczania bmi i innych grubasków :).
Zbuduj sobie zapytanie dla insert przetestuj czy działa (polecam zabawę w konsoli mySQL.) jak już będziesz mieć zapytanie, to po prostu podmień wartości jakie sobie wpisałeś tymi które podał użytkownik. Jak nie powiem bo pythona znam tylko z bajek o złych rycerzach pożerających dziewice i szlachetnych smokach.
Cytuj
cur = conn.cursor()
zwraca ci jakiś obiekt na jakim wykonujesz zapytania. W takim razie odpowiedzi jak wysłać zapytanie powinieneś szukać tutaj.

Chyba, że dopuści się do cur.execute("insert into table ...." + zmienna1 + "," +  zmienna2 + ","  + zmienna3);
Rozbij sobie kod. Im większy rozmiar jednej funkcji tym większa szansa na "fakap" i będziesz się dłużej z tym męczyć. Kod potem łatwiej debugować, modyfikować i tak dalej i tak dalej.
Polaczkowo:
Impos - Aeore Healer lvl 93 / Wynn Summoner 85 / TH 58
klan - Kowale
CP Sairea


  • Wiadomości: 155

  • Pochwał: 0

    • O mnie :)
Odp: Programowanie w Pythonie problem
« Odpowiedź #4 dnia: Maj 27, 2011, 09:57:13 am »
tak na szybko przed praca :)

tak przeglądałem
http://docs.python.org/library/sqlite3.html
i wynika że, da radę (chyba) jak wrócę siądę poczytam popróbuje :P