【问题标题】:Insert Google Analytics API data to postgresql [python]将 Google Analytics API 数据插入到 postgresql [python]
【发布时间】:2015-12-15 04:40:15
【问题描述】:

我想将批量数据存储到 postgresql。 我得到的数据来自谷歌分析 [API]。数据是关于浏览量的,这是我的代码:

data = '[["20151201","path","title",345], ["20151202","path","title",321], ["20151203","path","title",214]]'

def storeJson( jsonFile, tableName ):
    conn = psycopg2.connect( host=hostname, user=username, password=password, dbname=database )
    try:
        cur = conn.cursor()
        # Here is the problem:
        cur.executemany( "INSERT INTO " + tableName + " VALUES(%s)", [jsonFile])
        conn.commit()

    except psycopg2.DatabaseError as e:
        if conn:
            conn.rollback()
        print("Error %s" %e)
        exit()

    finally:
        if conn:
            cur.close()
            conn.close()

def main()
    storeJson(data, "daily_pageviews")

if __name__ == '__main__':
    main()

使用上面的代码,我收到如下错误消息:

json.decoder.JSONDecodeError: Expecting ':' delimiter: line 1 column 12 (char 11)

有人可以启发我吗?谢谢大家!

【问题讨论】:

  • 你能在这里添加你的create table 命令吗?需要插入数据为json还是在插入前解析?
  • 我认为表没有问题,因为错误与数据库无关。这是我的创建表查询:create table daily_pageviews("date" date, path text, title text, pageviews int)

标签: python postgresql google-analytics google-analytics-api


【解决方案1】:

最后,情况如下:首先,我的数据不是 json 格式,而是列表格式的列表。这是我使用 sqlalchemy 从朋友那里得到的解决方案:

from sqlalchemy.engine import create_engine
from sqlalchemy.schema import MetaData, Table

engine = create_engine('postgresql://db_username:db_password@ip/dbname')

metadata = MetaData()
metadata.bind = engine

def storeJson( jsonFile, tableName ):
    table = Table(tableName, metadata, autoload=True)
    #import ipdb; ipdb.set_trace()
    def to_dicts(rows):
        for row in rows:
            data = {}
            for i, column in enumerate(table.columns):
                data[column.name] = row[i]
            yield data
    params = list(to_dicts(jsonFile))
    engine.execute(table.insert(), params)
    return

假设 jsonFile 列表的值与 db 上的表完全一样。 注意:您可以使用 pip 安装 sqlalchemy

python -m pip install sqlalchemy --user

至于“如何”从谷歌分析中获取数据,你可以访问它的网站:https://developers.google.com/analytics/devguides/reporting/core/v3/quickstart/service-py

【讨论】:

    【解决方案2】:

    jsonFile 在您的情况下是一个字符串。你需要用json.loads()加载它:

    import json
    
    data = json.loads(jsonFile)
    cur.executemany("INSERT INTO " + tableName + " VALUES(%s, %s, %s, %s)", data)
    

    请注意,我在查询中有 4 个占位符 - 每个子列表中的每个项目。

    【讨论】:

    • 感谢您的回复。现在我收到错误:“TypeError:字符串格式化期间并非所有参数都转换了”。
    • @Wenhui 我的错,已修复。看看吧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2021-04-28
    相关资源
    最近更新 更多