python+django读取json数据,同步数据库

读取txt文件中的json



#!/usr/bin/python

#coding=utf-8
from django.core.management import setup_environ
#import sys
#sys.path.append('..')
from payment import settings
setup_environ(settings)
#------------------------------------
from datetime import datetime,date,timedelta
from payment.models import *
from django.db.models import Q,Avg,Sum,Count
from django.db import connection
from django.db import transaction
from django.contrib.sessions.models import Session
import json
import time
from decimal import *
from payhandler import mytest,plans
from payment.app import log
import os
import sys
import re


logger=log.get_logger('syncdb',__name__)
data={}
datalog={}
 #把所有表对象放到一个元组中
tab=(account,account_detail,account_recharge,account_recharge_log,user_login_log,credit_class,credit_rule,
         festival_datelist,excute_datelist,schedule_list,credit_exec,partner_credit,
         partner_credit_detail,latefee_detail,account_status_log,messages,ignore_date_list,amount_level,
         account_daily_summary,account_daily_summary_detail)#需要同步的对象
#把同步到数据库的信息写入syncdb.txt
def writetxt(jdata):
    f=open('syncdb.txt','w')
    f.write(jdata)
    f.close()
#把需要同步的数据存储
def test4(data1):
    for key,value in data1.items():


        tabstr=key
        id=value
        for j in tab:
            strcut= j._meta.db_table
            if cmp(strcut,tabstr)==0:
                   r1 =j.objects.using('aa').order_by('id').filter(pk__gt=id)[:3]
                   ids = []


                   for rvalue in r1:
                       ids.append(rvalue.id)
                   if len(ids)>0:
                       for k in ids:
                         r=j.objects.using('aa').get(id=k)
                         r.save(using='default')
                         r2=j.objects.using('default').get(id=k)
                         print (u'数据库表:%s,同步id为:%d'%(tabstr,k))
                         data1[tabstr]=k
                   else:
                         del(data1[tabstr])
                         datalog[tabstr]=id
                         print(u"数据库表:%s数据同步结束,结束id为:%d"%(tabstr,id))


def linkdic(data1):
                if len(data1)==0:
                      data=datalog
                elif len(datalog)==0:
                      data=data1
                else:
                     data=dict(data1.items()+datalog.items())
                jsondata=json.dumps(data)
                writetxt(jsondata)


def readjson():#读取txt中需要同步的json数据
            print (u"***********************同步数据库开始***************************")
            starttime=time.time()
            with open('syncdb.txt','r') as f:
               fdata=f.read()
            data1 = json.loads(fdata)


            if len(data1)==0:
                pass
            else:
                try:
                    while len(data1)>0:
                           test4(data1)
                           linkdic(data1)
                except:
                        pass
                finally:
                        linkdic(data1)
                        endtime=time.time()
                        print("同步数据所需的时间:"+str(endtime-starttime)+"秒")
                        print (u"***********************同步数据库结束***************************")
                time.sleep(200)
                while True:
                      readjson()


def test():
     print  account_detail
     r=account_detail.objects.using('aa').get(id=2676)
     r=account_detail.objects.using('aa').filter(id=0)
     print len(r)
    # r.save(using='default')
     #print r
     #r.save(using='default')
     #print r.nickname
     r1=account_detail.objects.get(id=2676)
     print r1


if __name__=='__main__':
    #test()
    readjson()
    pass






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值