【问题标题】:Postgres save incoming dataPostgres 保存传入的数据
【发布时间】:2022-01-10 11:06:09
【问题描述】:

我正在尝试将来自 d 的传入数据保存在 postgres 数据库中,但它一直返回 listdata 没有属性数据,我不明白为什么 - 如果我没记错的话,只有一列需要正确保存?

如果你这样做print(d),你可以看到数据来了,但我不知道如何保存它。

from datetime import datetime
from requests import Session
import pandas as pd
import matplotlib.pyplot as plt
import psycopg2
import time
from psycopg2.extras import RealDictCursor

page_url = "https://www.nseindia.com/get-quotes/equity?symbol=LT"
chart_data_url = "https://www.nseindia.com/api/chart-databyindex"

s= Session()

h = {"user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36",
     "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
    "accept-encoding": "gzip, deflate, br",
    "accept-language": "en-GB,en-US;q=0.9,en;q=0.8",
    }

s.headers.update(h)
r = s.get(page_url)
def fetch_data(symbol):
    data = {"index": symbol + "EQN"}
    r = s.get(chart_data_url, params=data)
    data = r.json()['grapthData']
    return [[datetime.utcfromtimestamp(d[0]/1000),d[1]] for d in data]

data = fetch_data("MARUTI")
with psycopg2.connect(
    host="localhost",
    database="tickdata",
    port="5432",
    user="postgres",
    password="passkey",
    cursor_factory=RealDictCursor,
) as conn:
    with conn.cursor() as cur:
        sql = """INSERT INTO pytick (sequence) VALUES (%s) RETURNING *"""
        
        cur.executemany(sql, data)

返回此错误 cur.executemany(sql,数据) TypeError:字符串格式化期间并非所有参数都转换了 【1.8s完成】

【问题讨论】:

  • 缩进看起来很奇怪(d = fetch_data(...return statement`...处于同一级别)并且缩进在Python中确实很重要。您能否提供正确的缩进?
  • 重新格式化检查一下

标签: python postgresql


【解决方案1】:

您的 sqlcode 是一个元组。应该不会吧。

你也没有使用RETURNING 子句,所以去掉它。

总而言之,您可能正在寻找类似的东西

data = fetch_data("MARUTI")
with psycopg2.connect(
    host="localhost",
    database="tickdata",
    port="5432",
    user="postgres",
    password="passkey",
    cursor_factory=RealDictCursor,
) as conn:
    with conn.cursor() as cur:
        sql = "INSERT INTO pytick (id, data) VALUES (%s, %s)"
        cur.executemany(sql, data)

data 中插入所有二元组。

【讨论】:

  • 我收到此错误::: 在字符串格式化期间并非所有参数都已格式化
  • 你在哪里得到这个错误?
  • cur.executemany(sql,data) 在这里我得到了那个错误,我已经排除了那个 id 字段
  • 看到我更新了代码
  • 那么你为什么要删除 id 字段?您的 data 每个插入行有 2 个项目。
猜你喜欢
  • 2017-05-29
  • 2021-02-02
  • 2018-10-11
  • 2019-01-11
  • 2021-02-09
  • 2017-09-24
  • 2021-08-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多