Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: python+postgre  (Přečteno 2136 krát)

kisto

  • Návštěvník
  • Příspěvků: 58
python+postgre
« kdy: 14 Února 2011, 15:18:54 »
Ahojte nevie mi niekto poradit skusam sa hrat s pythonom a ze ako mam vlozit premenne z pythonu do sql dotazu
sql = """INSERT INTO kn(a, b, c)
         VALUES (var1, var2, var3))"""

cur.execute(sql)

var1-3 su premenne

starenka

  • Stálý člen
  • **
  • Příspěvků: 1276
  • Karma: plynová [zapalovač] [hasičák]
    • /home/starenka
Re: python+postgre
« Odpověď #1 kdy: 14 Února 2011, 17:58:31 »
Kód: [Vybrat]
q = 'INSERT INTO kn(a, b, c) VALUES (%s)'%','.join([v1,v2,v3])
stejne se nevyhnes tomu, ze budes resit escapovani a apostrofy/uvozovky... radsi koukni na nejakej active record/orm (sqlachemy napriklad)
« Poslední změna: 14 Února 2011, 18:02:23 od starenka »
mojenka | blozinek v2 | starej blozinek | krotim hady za penize | UJ! Kalužátor

Debian testing vrní v Thinkpadu X200/bedně/EEE 900a, MasoX Tiger v lampe

kisto

  • Návštěvník
  • Příspěvků: 58
Re: python+postgre
« Odpověď #2 kdy: 14 Února 2011, 19:23:15 »
for rec in db:
   
  print rec[0], rec[1],rec[2]
  v1=rec[0]
  v2=rec[1]
  v3=rec[2]

 cur.execute("INSERT INTO kn (a, b) VALUES (%s, %s)",(v1,v2))

tak to mam a chcel by som aby to vkladalo kazdy zaznam... ale nefunguje to do databazy sa nevlozi ziaden zaznam

starenka

  • Stálý člen
  • **
  • Příspěvků: 1276
  • Karma: plynová [zapalovač] [hasičák]
    • /home/starenka
Re: python+postgre
« Odpověď #3 kdy: 14 Února 2011, 20:09:36 »
Vyprintni si ten execute, nebo to hodilo nejakej traceback (chybu)? btw, proc to tam nenandas rovnou z toho rec
  • ? Co to vlastne ma delat? Hod sem zdrojak, jesli muzes.
mojenka | blozinek v2 | starej blozinek | krotim hady za penize | UJ! Kalužátor

Debian testing vrní v Thinkpadu X200/bedně/EEE 900a, MasoX Tiger v lampe

kisto

  • Návštěvník
  • Příspěvků: 58
Re: python+postgre
« Odpověď #4 kdy: 14 Února 2011, 20:12:21 »
Kód: [Vybrat]
import datetime
from mx import DateTime
from dbfpy import dbf
import psycopg2
## read DBF and print records

try:
    conn = psycopg2.connect("dbname='postgres' user='postgres' host='localhost' password='19071990'")
except:
    print "I am unable to connect to the database"

cur = conn.cursor()



db = dbf.Dbf("SPI/lv810304.dbf")
for rec in db:
   
  print rec[0], rec[1],rec[2]
  v1=rec[0]
  v2=rec[1]
  v3=rec[2]
  cur.execute("INSERT INTO kn (b, c) VALUES (%s, %s)",(v1,v2))
  print cur.execute("INSERT INTO kn (b, c) VALUES (%s, %s)",(v1,v2))

      # Commit your changes in the database
# disconnect from server
conn.close()


a ten execute ma v printe hodnotu none

starenka

  • Stálý člen
  • **
  • Příspěvků: 1276
  • Karma: plynová [zapalovač] [hasičák]
    • /home/starenka
Re: python+postgre
« Odpověď #5 kdy: 14 Února 2011, 20:15:32 »
no to je jasny, nesmis ho tam mit dvakrat (tu transakci uz udelal ten prvni, ten si mel printovat) ;D
btw, jak uz jsem psal, pokud to nejsou cisla, urcite ti to zkapalo na tom, ze to nemas obaleny ' nebo "
« Poslední změna: 14 Února 2011, 20:17:43 od starenka »
mojenka | blozinek v2 | starej blozinek | krotim hady za penize | UJ! Kalužátor

Debian testing vrní v Thinkpadu X200/bedně/EEE 900a, MasoX Tiger v lampe

kisto

  • Návštěvník
  • Příspěvků: 58
Re: python+postgre
« Odpověď #6 kdy: 14 Února 2011, 20:21:46 »
Su to cisla, aj ked printujem ten prvy execute tak je none

starenka

  • Stálý člen
  • **
  • Příspěvků: 1276
  • Karma: plynová [zapalovač] [hasičák]
    • /home/starenka
Re: python+postgre
« Odpověď #7 kdy: 14 Února 2011, 20:27:09 »
hele to je tezky, nevim strikturu db apod. Zkus si to do toho pgcka vlozit navtrdo bez tech placeholderu (nejaky dummy data - cistej insert mimo ten cyklus, kde to tahas z jiny db). Pak treba zkust ten sprintf, jak sem ti radil.... proste se to pokus nejak odladit. Zadnou evidentni chybu tam nevidim. Btw jak iterujes ty polozky z toho dbf, tak to neco vypisuje jo? Zda se mi to takovy moc jednoduchy, aby to neco delalo..

neznam to pgckovy api, ale neni treba po tom executu, jeste komitnout tu session?
mojenka | blozinek v2 | starej blozinek | krotim hady za penize | UJ! Kalužátor

Debian testing vrní v Thinkpadu X200/bedně/EEE 900a, MasoX Tiger v lampe

kisto

  • Návštěvník
  • Příspěvků: 58
Re: python+postgre
« Odpověď #8 kdy: 14 Února 2011, 20:29:14 »
J vypisuje vsetky data :) asi v jednoduchosti je krasa

starenka

  • Stálý člen
  • **
  • Příspěvků: 1276
  • Karma: plynová [zapalovač] [hasičák]
    • /home/starenka
Re: python+postgre
« Odpověď #9 kdy: 14 Února 2011, 20:30:43 »
http://initd.org/psycopg/docs/usage.html

no jasne ze to musis komitnout....

#edit: ad ty placeholdery -  na ten sprintf se vykasli, takhle jak to delas je to dobre. Zrejme to samo escapuje.
mojenka | blozinek v2 | starej blozinek | krotim hady za penize | UJ! Kalužátor

Debian testing vrní v Thinkpadu X200/bedně/EEE 900a, MasoX Tiger v lampe

 

Provoz zaštiťuje spolek OpenAlt.