将Google Analytics API数据插入postgresql[python]



我想将批量数据存储到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:应为":"分隔符:第1行第12列(字符11)

有人能启发我吗?谢谢大家!

最后,情况如下:首先,我的数据不是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安装sqlalchemy--用户

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

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

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

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