Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: kisto 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
-
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)
-
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
-
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.
-
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
-
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 "
-
Su to cisla, aj ked printujem ten prvy execute tak je none
-
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?
-
J vypisuje vsetky data :) asi v jednoduchosti je krasa
-
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.