【问题标题】:Python - Trying to insert dictionaries into postgres database, seeing keyerrorPython - 试图将字典插入 postgres 数据库,看到 keyerror
【发布时间】:2020-01-16 20:19:47
【问题描述】:

尝试将字典插入 postgres 数据库,看到错误: KeyError: 'longPositionPercentage'

url = 'https://demo-api.example.com/gateway/deal/example?'
    response = requests.get(url, params=params, headers=headers)
    result=response.json()
    #print(result)
    for item in result['clientSentiments']:
            print(item)
    cursor = conn.cursor()
    cursor.execute("""INSERT INTO sentiment_history
                      (client_sentiment_long,client_sentiment_short,marketid) 
                      VALUES (%(longPositionPercentage)s,
                              %(shortPositionPercentage)s,
                              %(marketId)s,);""",result)
    conn.commit()
    print(datetime.now(), cursor.rowcount, "record inserted/updated")
     # Close the connection
    conn.close()

我试图保存到数据库的字典示例:

{u'shortPositionPercentage': 35.0, u'longPositionPercentage': 65.0, u'marketId': u'2YRTND'}
{u'shortPositionPercentage': 36.0, u'longPositionPercentage': 64.0, u'marketId': u'SE30'}
{u'shortPositionPercentage': 30.0, u'longPositionPercentage': 70.0, u'marketId': u'USDHUF'}
{u'shortPositionPercentage': 17.0, u'longPositionPercentage': 83.0, u'marketId': u'ETHXBT'}

【问题讨论】:

  • 你的标题为什么提到 Python 2?
  • 我正在编写python 2.7
  • 你使用 print 就像一个函数,这是 Python 2 和 3 之间最明显的区别之一......
  • 抱歉,我只是在这里学习。你知道我为什么会看到 keyerror 吗?
  • 完整的错误信息是什么?

标签: python json postgresql


【解决方案1】:

试试这样的:

import psycopg2
import pandas as pd
import json


conn = psycopg2.connect("dbname='yyy' user='yyy' host='yyyy' password='yyyy'")
cur = conn.cursor()

f='{"clientSentiments": [{"shortPositionPercentage": 35.0, "longPositionPercentage": 65.0, "marketId": "2YRTND"}, {"shortPositionPercentage": 35.0, "longPositionPercentage": 65.0, "marketId": "SE30"}]}'
data = json.loads(f)

for k in data['clientSentiments']:
  columns = ['client_sentiment_long','client_sentiment_short','marketid']
  columns = ",".join([str(s) for s in list(columns)])
  values = ",".join(["'"+str(s)+"'" for s in list(k.values())])
  sql = "INSERT INTO sentiment_history (%s)  VALUES  (%s) " % (columns , values)
  print(sql)
  cur.execute(sql)

conn.commit() 
conn.close() 

【讨论】:

  • 不要这样做。使用 psycopg2 进行字符串替换。您的方法使代码对 sql 注入和处理特殊字符的许多问题保持开放。
  • @Jeremy 那怎么办?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-13
  • 2017-05-20
  • 1970-01-01
  • 1970-01-01
  • 2018-11-19
相关资源
最近更新 更多