2015-10-01 2 views
-1

У меня следующая проблема, что когда я пытаюсь выполнить этот код:Python оператора SQL для кодирования Postgres неудачи

try: 
with open('moviedata.json') as data_file: 
    data = json.load(data_file) 
    for movie in data: 
     global year 
     global title 
     global info 
     global directors 
     global release 
     global rating 
     global genres 
     global img 
     global plot 
     global rank 
     global running_time 
     global actors 
     if 'year' in movie: 
      year = movie['year'] 
     if 'title' in movie: 
      title = movie['title'] 
     if 'info' in movie: 
      info = movie['info'] 
     if 'directors' in movie['info']: 
      directors = [movie['info']['directors']] 
     if 'release_data' in movie: 
      release = movie['info']['release_date'] 
     if 'rating' in movie['info']: 
      rating = movie['info']['rating'] 
     if 'genres' in movie['info']: 
      genres = movie['info']['genres'] 
     if 'image_url' in movie['info']: 
      img = movie['info']['image_url'] 
     if 'plot' in movie['info']: 
      plot = movie['info']['plot'] 
     if 'rank' in movie['info']: 
      rank = movie['info']['rank'] 
     if 'running_time_secs' in movie['info']: 
      running_time = movie['info']['running_time_secs'] 
     if 'actors' in movie['info']: 
      actors = movie['info']['actors'] 
     sqlstatement = '''insert into directors(name)(select %(directors) where not exists(select 1 from directors where name = %(directors));''' 
     print sqlstatement 
     cur.execute(sqlstatement) 

Файлов много JSon данных на более чем 4000 фильмов и некоторые включает в себя значение, может видеть в операторах if, а некоторые нет.

Переменная Director загружает некоторые данные типа string.

+0

'sqlstatement' является кортежем. Это должна быть строка. – Kevin

+0

Я вижу, вы можете привести пример того, как я его конвертирую? – McBoman

+0

Удалить ', (директоров [0])' из конца строки. – Kevin

ответ

1
sqlstatement = ''' 
    insert into directors (name) 
    select %(director)s 
    where not exists (
     select 1 
     from directors 
     where name = %(director)s 
    ); 
''' 
cur.execute(sqlstatement, {'director': directors[0]}) 
Смежные вопросы