2017-11-15 4 views
-1

何らかの理由でAdWordsに通常のREST APIがない場合、代わりに.csvファイルまたは最近の文字列を返すSOAP APIが使用されます。CSVソースからdjangoモデルを作成する

私はdjangoを使用しており、結果をデータベースに保存する必要があります。現在、私はPandasを使用して文字列をデータフレームに変換し、それを反復処理してデータベースに保存します。しかし、このプロセスは遅く、非効率的です。私はこれのためだけにパンダを使いたくない。私の状況でASTは機能しますか?

これを行う最も簡単な方法は何ですか?

パンダと私のコードは次のようになります。

abc = report_downloader.DownloadReportAsString(report, skip_report_header=True, skip_column_header=False,skip_report_summary=True) 
print(abc) 
print(type(abc)) 
df = pd.read_csv(StringIO(abc), sep=",",) 
#print (df.to_string()) 

for index, row in df.iterrows(): 

    ctr = float(float(row['CTR'].strip('%'))/100) 
    conv_rate = float(float(row['Conv. rate'].strip('%'))/100) 
    cost = row['Cost']/1000000 
    cpm = row['Avg. CPM']/1000000 
    avg_cpc = row['Avg. CPC']/1000000 
    def_data = { 
       'impressions':row['Impressions'], 
       'ctr':ctr, 
       'avg_cpc':avg_cpc, 
       'conversion_rate':conv_rate, 
       'clicks':row['Clicks'], 
       'cost':cost, 
       'cpm':cpm, 
       'conversions':row['Conversions'], 
       } 


    obj, created = AdWordsData.objects.get_or_create(
                user=user, 
                date=row['Day'], 
                campaign=row['Campaign'], 
                ad_group=row['Ad group'], 
                final_url=row['Final URL'], 
                tracking_template=row['Tracking template'], 
                defaults=def_data, 
                ) 

    if not created: 
     obj.__dict__.update(**def_data) 
     obj.save() 

else: 
    print ('No campaigns were found.') 

ABC(アドワーズ広告によるデータのリターンは文字列であり、次のようになります。CSVファイルを読み込むためにパンダを使用し

Day,Campaign,Ad group,Final URL,Tracking template,Impressions,CTR,Avg. CPC,Conv. rate,Clicks,Cost,Avg. CPM,Conversions 
2017-09-08,mysite.me Many Keywords,Many Keywords,https://mysite.me, --,364,0.82%,73333,0.00%,3,220000,604396,0.00 
2017-09-10,mysite.me Many Keywords,Many Keywords,https://mysite.me, --,1562,3.46%,435926,0.00%,54,23540000,15070423,0.00 
2017-09-11,mysite.me Many Keywords,Many Keywords,https://mysite.me, --,1806,3.49%,387619,0.00%,63,24420000,13521595,0.00 

答えて

0

は行き過ぎ確かにありますあなたはあなたがあなたの上で反復することができますbasic pythonを使用してください。

またはより良いあなたは、あなたがcrを可能にする既存のdjangoライブラリを使用することができますcsvファイル/入力からdjangoモデルのリストを出力します。例:django import-export

>>> import tablib 
>>> from import_export import resources 
>>> from core.models import Book 
>>> book_resource = resources.modelresource_factory(model=Book)() 
>>> dataset = tablib.Dataset(['', 'New book'], headers=['id', 'name']) 
>>> result = book_resource.import_data(dataset, dry_run=True) 
>>> print result.has_errors() 
False 
>>> result = book_resource.import_data(dataset, dry_run=False) 
関連する問題