zoukankan      html  css  js  c++  java
  • django数据库导入csv文件的一个例子

    目标:导入networksolution域名下载的csv文件

    import os, random, string, csv
    from datetime import datetime
    import pytz
    
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'OpsManage.settings')
    
    import django
    django.setup()
    from asset.models import DomainName
    
    
    def gen_random_id():
        mystring = string.digits + string.ascii_letters
        random_list = random.sample(mystring, 8)
        random_string = "N" + "".join(random_list)
        return random_string
    
    # 生成一个数据库中不存在的主键id, 避免重复
    def target_id():
        domain_id_lists = DomainName.objects.all().values("id")
        list1 = []
        for x in domain_id_lists:
            list1.append(x.get("id"))
        while True:
            myid = gen_random_id()
            if myid not in list1:
                break
        return myid
    
    
    f = open("/data/apps/opsmanage/apps/asset/domainsList.csv", encoding="utf-8")
    next(f) # 跳过第一行标题
    reader = csv.reader(f)
    for row in reader:
        privacy = row[3]
        if privacy == "Yes":
            privacy = bool(privacy)
        else:
            privacy = bool(0)
        if not DomainName.objects.filter(name=row[0]):
            DomainName.objects.create(
                id=target_id(),
                name=row[0],
                registerTime=datetime.strptime("2020-01-01", "%Y-%m-%d").replace(tzinfo=pytz.utc),
                expiredTime=datetime.strptime(row[6], "%m/%d/%Y").replace(tzinfo=pytz.utc),
                autoRenew=1,
                account_id="8488c869-a4b6-4c9b-ad16-2ea2d04f"
            )
        else:
            DomainName.objects.filter(name=row[0]).update(
                expiredTime=datetime.strptime(row[6], "%m/%d/%Y").replace(tzinfo=pytz.utc), proxyService=privacy)
    
    f.close()

    1. 注意代码中时间的处理

    # 字符串转UTC时间
    expiredTime = datetime.strptime(row[6],"%m/%d/%Y").replace(tzinfo=pytz.utc), 加上repalce可以避免下面警告, 因为django配置中开启了时区。

    RuntimeWarning: DateTimeField DomainName.expiredTime received a naive datetime (2021-07-24 00:00:00) while time zone support is active.

    >>> import pytz
    >>> import datetime
    >>> datetime.datetime.now()
    datetime.datetime(2009, 5, 26, 20, 23, 12, 109000)
    >>> datetime.datetime.now(pytz.utc)
    datetime.datetime(2009, 5, 26, 12, 23, 23, 500000, tzinfo=<UTC>)
    >>> datetime.datetime.now(pytz.timezone(pytz.country_timezones('cn')[2]))
    datetime.datetime(2009, 5, 26, 20, 24, 9, 296000, tzinfo=<DstTzInfo 'Asia/Chongqing' CST+8:00:00 STD>)
    >>> pytz.country_timezones('cn')
    ['Asia/Shanghai', 'Asia/Harbin', 'Asia/Chongqing', 'Asia/Urumqi', 'Asia/Kashgar']


    >>> datetime.now().strftime("%F %H:%M:%S")
    '2021-04-30 14:48:13'

    2. tzinfo的一个链接:https://www.cnblogs.com/goodspeed/archive/2011/11/07/python_tzinfo.html

    生命的意义在于奉献, 解决各种问题
  • 相关阅读:
    springmvc spring mybatis框架整合
    多线程bug修复
    OutOfMemory
    CSS中强悍的相对单位之em(em-and-elastic-layouts)学习小记
    css中line-height行高的深入学习
    HTML5的新语义化的标签
    关于Three.js基本几何形状
    【Google Chrome】 Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource问题解决
    模拟Bootstrap响应式网格系统
    关于我对写博客那些事儿的实用心得
  • 原文地址:https://www.cnblogs.com/regit/p/14718077.html
Copyright © 2011-2022 走看看