【问题标题】:Python sql statement to postgres encoding failPython sql语句到postgres编码失败
【发布时间】:2015-10-01 16:20:15
【问题描述】:

当我尝试执行此代码时遇到以下问题:

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)

这些文件包含 4000 多部电影的大量 json 数据,其中一些包含您可以在 if 语句中看到的值,而有些则没有。

directors 变量确实加载了一些字符串类型的数据。

【问题讨论】:

  • sqlstatement 是一个元组。它应该是一个字符串。
  • 我知道你能举个例子来说明我是如何转换它的吗?
  • 从行尾删除, (directors[0])
  • 与您的问题没有直接关系,但您应该真正尝试摆脱那些global 声明。

标签: python json postgresql


【解决方案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]})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-26
    • 2012-07-02
    • 2017-06-14
    • 1970-01-01
    相关资源
    最近更新 更多