Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1

 Użytkownik
	

cześć od wczoraj męczę pythona tak nieco bardziej poważnie :) wiem jak to brzmi :P
ale do rzeczy.
muszę wstawić do tabeli w bazie danych która ma dość pokaźną ilość kolumn, żeby nie zrobić literówek i nie przepisywać nazw wszystkich kolumn wymyśliłem sobie że zrobię słownik klucz:wartość.
Wówczas łatwiej będzie przygotowywać długie zapytania (takie gdzie ilość kolumn liczona jest w dziesiątki).
napisałem od ręki trywailny kod który to załatwia:
def preparesql(table, conf):
   sql = {}
   sql['query'] = ''
   sql['init'] = 'INSERT INTO ' + table
   sql['row'] = ''
   sql['values'] = ''
   tsql = None
   for key in conf.keys():
      sql['row'] = sql['row'] + key + ', '
      if type(conf[key]) == type(1):
        tsql = str(conf[key]) + ', '
      elif type(conf[key]) == type('A'):
        tsql = "'" + conf[key] + "', "
      elif conf[key] == None:
        tsql = 'null, '
      sql['values'] = sql['values'] + tsql
   sql['row'] = sql['row'][:-2]
   sql['values'] = sql['values'][:-2]
   sql['query'] = sql['init'] + ' (' + sql['row'] + ') ' + 'values(' + sql['values'] + ')'
   return sql['query']
#przyklad
#slownik z danymi do wstawienia
opt = {}
opt['host'] = 'localhost'
opt['port'] = 1234
opt['opt'] = 'xyz'
opt['puste'] = None
#wynik dzialania
print( preparesql('jakastabela', opt) )wynik działania
INSERT INTO jakastabela (host, port, opt, puste) values('localhost', 1234, 'xyz', null)i działa OK ale zapewne wymyślam koło na nowo :) więc pytanie do bardziej oblatanych, jest jakiś moduł do pythona który takie coś robi tylko pewnie fajniej :)
Ostatnio edytowany przez life (2018-07-17 00:24:09)
Offline



 Użytkownik
	Jest kilkanaście, każdy inny i z reguły specjalizowany do konkretnego silnika. Do PostgreSQL-a masz np. PyGreSQL czy psycopg2. Do MySQL-a będzie to python-mysqldb, a pewnie i parę innych by się znalazło.
W ogóle Google dużo wiedzą na ten temat i jakoś szybciej odpowiadają niż forum... próbowałeś?
Offline

 Użytkownik
	

no właśnie nie bardzo widziałem, wstawiać będę do bazy MS SQL Server moduł pythona do tego to pymssql można tam wstawiać zapytania jak w innych czyli przekazując listę lub krotkę (tuple) ale nie widziałem metody w tej klasie żeby wstawiać słownik gdzie klucz to nazwa kolumny i wartość do wstawienia.
z pytonem dopiero się poznajemy :) oczywiście wcześniej na googlu szukałem ale bez efektów, pewnie skończy się na tym że w swojej klasie zostawię metodę na podobieństwo tego co napisałem w sumie to głównie dla dwóch tabel gdzie jadna ma 147 kolumn! druga już jest mniejsza bo około 40
ale znalazłem coś łatwiejszego :) 
#slownik z danymi do wstawienia
opt = {}
opt['host'] = 'localhost'
opt['port'] = 1234
opt['opt'] = 'xyz'
opt['puste'] = None
col = ', '.join(opt.keys())
values = ':'+', :'.join(opt.keys())
query = 'INSERT INTO my_table {0} VALUES ({1})'.format(col, values)
cur.execute(query, opt)to przykłąd dla pythona3.x użyte format do budowy stringu dla starszych wersji: query = 'INSERT INTO my_table %s VALUES (%s)' % (col, values)
Ostatnio edytowany przez life (2018-07-19 14:03:07)
Offline



 Użytkownik
	A co będzie, jeśli
opt['opt']="O'Connor"
Offline
Strony: 1