使用Django清理数据库中的数据

数据库,数据清洗

问题叙述性说明:在系统我用在,因为历史和由于各种原因,原因记录的数据内的数据库表,有一个问题,有反复和不完整的数据

解:首先。由于数据量还是挺大的,工的清理肯定不行,

然后,我就想写SQL脚本来依照约定的规则进行更新,能够利用游标

来完毕表中的记录的遍历,可是SQL是面向结构化的查询语言,不是面向过程的。所以尽管能够可是没有C和python这种面向过程的使用方便,

后来。我想直接在我的项目中新建一个方法。然后通过浏览器的地址栏来调用。就能够了。

PS:尽管说Django的orm非常方便,可是自己使用起来还是非常的尴尬,一些筛选条件和语法规则。我还是得在网上查找样例才知道怎么用

幸好提供了直接运行SQL语句方法,我在清理的过程中。用的就是运行原生的SQL语句。

代码例如以下:

def datetimestr():
    return datetime.now().strftime('%Y%m%d-%H%M%S')+'>>>'   

def update_dcData(req):

    log_path='apps/dc/l10n_reports'
    update_dcData_log=open(log_path+'updateDcdataLog.log','w+')

    sql_getProjectIDs='select a.project_id from'                        ' (select count(*) num,project_id from dc_data where lableName=%s group by project_id) a,'                        ' (select count(*) num ,project_id from management_project_target_lang group by project_id) b'                        ' where a.project_id=b.project_id and a.num!=b.num order by project_id'

    sql_getAllProjectIDs='select project_id from management_project'

    sql_getLanguageSections='select b.name from management_project_target_lang a,management_l10nlanguage b'                             ' where a.project_id=%s and a.l10nlanguage_id=b.id and b.id!="1"'

    sql_getRecords='select id, languageSection,value from dc_data where lableName =%s and project_id=%s and important="1"'

    sql_addRecordByID='insert into dc_data(lableName,languageSection,type,value,project_id,task_id,'                 'important,unit,settlement,workload) '                 'select lableName,languageSection,type,value,project_id,task_id,important,unit,settlement,workload '                 'from dc_data where id=%s'
    sql_updateLgs='update dc_data set languageSection=%s where id=%s'

    sql_getLableNames='select lableName from dc_data where lableName like "%%_all" group by lableName'

    update_dcData_log.write(datetimestr()+'sql_getLableNames'+'>>>'+sql_getLableNames+'\n')
    update_dcData_log.write(datetimestr()+'sql_getRecords'+'>>>'+sql_getRecords+'\n')
    update_dcData_log.write(datetimestr()+'sql_getProjectIDs'+'>>>'+sql_getProjectIDs+'\n')
    update_dcData_log.write(datetimestr()+'sql_getLanguageSections'+'>>>'+sql_getLanguageSections+'\n')
    update_dcData_log.write(datetimestr()+'sql_addRecordByID'+'>>>'+sql_addRecordByID+'\n')
    update_dcData_log.write(datetimestr()+'sql_updateLgs'+'>>>'+sql_updateLgs+'\n')
    context=Context({'msg':'Success'})
    resp=render_to_response("report/clean_data.html", context,
                              context_instance=RequestContext(req))
    cursor=connection.cursor()
    try:
        cursor.execute(sql_getLableNames)
        lableNames=cursor.fetchall()
    except Exception,e:
        update_dcData_log.write(datetimestr()+'execute sql_getLableNames error '+str(e)+'\n')
        context=Context({'msg':'Error'})
        return render_to_response("report/clean_data.html", context,
                              context_instance=RequestContext(req))
    for lableName in lableNames:
        try:
            cursor.execute(sql_getProjectIDs,[lableName[0]])
            projectIDs=cursor.fetchall()
        except Exception,e:
            update_dcData_log.write(datetimestr()+'execute sql_getProjectIDs error '+str(e)+'\n')
            context=Context({'msg':'Error'})
            return render_to_response("report/clean_data.html", context,
                              context_instance=RequestContext(req))
        for pid in projectIDs:
            try:
                cursor.execute(sql_getRecords,[lableName[0],str(pid[0])])
                records=cursor.fetchall()
                cursor.execute(sql_getLanguageSections,[str(pid[0])])
                languageSections=cursor.fetchall()
            except Exception,e:
                update_dcData_log.write(datetimestr()+'execute sql_getRecords or sql_getLanguageSections error '+str(e)+'\n')
                context=Context({'msg':'Error'})
                return render_to_response("report/clean_data.html", context,
                              context_instance=RequestContext(req))
            values,lgs=[],[]
            baseValue=str(records[0][2])
            baseID=str(records[0][0])
            for item in records:
                lgs.append(str(item[1]))
                values.append(str(item[2]))
                if baseValue!=str(item[2]):
                    baseValue='false'
            targetLgs=[str(item[0]) for item in languageSections]
            if len(lgs)<1 or len(targetLgs)<1:
                baseValue=='false'
            if 'all' not in lgs:
                try:
                    cursor.execute(sql_addRecordByID,[baseID])
                    cursor.execute(sql_updateLgs,['all',baseID])
                    transaction.commit_unless_managed()
                except Exception,e:
                    update_dcData_log.write(datetimestr()+'execute sql_addRecordByID or sql_updateLgs error (all)'+str(e)+'\n')
                    context=Context({'msg':'Error'})
                    return render_to_response("report/clean_data.html", context,
                                  context_instance=RequestContext(req)) 

                    update_dcData_log.write(datetimestr()+"all record is add into dc_data,the lableName and projectID were "+str(lableName[0])+'-'+str(pid[0])+'\n')

            if baseValue=='false':
                update_dcData_log.write(datetimestr()+"please update this record mutually,the lableName and projectID were "+str(lableName[0])+'-'+str(pid[0])+'\n')
            else:
                if len(lgs)>len(targetLgs):
                    update_dcData_log.write(datetimestr()+"the lableName languageSection length is longer than target numbers lableName and projectID were "+str(lableName[0])+'-'+str(pid[0])+'\n')
                else:
                    for lg in targetLgs:
                        if lg not in lgs:
                            try:
                                cursor.execute(sql_addRecordByID,[baseID])
                                cursor.execute(sql_updateLgs,[lg,baseID])
                                transaction.commit_unless_managed()
                            except Exception,e:
                                update_dcData_log.write(datetimestr()+'execute sql_addRecordByID or sql_updateLgs error (lg)'+str(e)+'\n')
                                context=Context({'msg':'Error'})
                                return render_to_response("report/clean_data.html", context,
                                  context_instance=RequestContext(req)) 

                            update_dcData_log.write(datetimestr()+lg+" record is add into dc_data,the lableName and projectID were "+str(lableName[0])+'-'+str(pid[0])+'\n')

    update_dcData_log.close() 

    return  resp   
时间: 2024-10-15 04:45:38

使用Django清理数据库中的数据的相关文章

使用Django来清理数据库中的数据

数据库中的数据清理 问题描述:在我所使用的系统中,由于历史和各种原因,导致数据库中表里面记录的数据,是有问题的,有重复的和不完整的数据 解决方案:首先,由于这些数据的量还是挺大的,手工的清理肯定不行, 然后,我就想写SQL脚本来按照约定的规则进行更新,可以利用游标 来完成表中的记录的遍历,但是SQL是面向结构化的查询语言,不是面向过程的,所以虽然可以但是没有C和python这样的面向过程的使用方便, 后来,我想直接在我的项目中新建一个方法,然后通过浏览器的地址栏来调用,就可以了. PS:虽然说D

数据库基础#3:数据库中的数据?

原文链接:https://www.scarydba.com/2017/06/20/database-fundamentals-3-whats-database/ 转载自BOOK – "EXECUTION PLANS" CODE   AZURE DATA PLATFORM INSTRUCTORS 值得注意的是,很多人永远不需要创建自己的数据库. 您也许永远不会创建自己的表或其他数据结构. 您只能运行备份和恢复并操纵系统上的安全性,并让应用程序为您安装数据库. 这是完全可以理解的,完全符合

Java实现Excel导入数据库,数据库中的数据导入到Excel

实现的功能: Java实现Excel导入数据库,如果存在就更新 数据库中的数据导入到Excel 1.添加jxl.jar mysql-connector-java.1.7-bin.jar包到项目的lib目录下­ 2.Excel文件目录:D://book.xls 3.数据库名:javenforexcel 4.表名:stu 5.编写类:连接mysql的字符串方法.插入的方法.实体类­­ 表结构如下 : 连接数据库的工具类 package com.javen.db; import java.sql.Co

java更改数据库中的数据

不废话,上代码 1 package com.ningmeng; 2 3 import java.sql.*; 4 5 /** 6 * 1:更改数据库中的数据 7 * @author biexiansheng 8 * 9 */ 10 public class Test04 { 11 12 public static void main(String[] args) { 13 // TODO Auto-generated method stub 14 try { 15 Class.forName("

用PHP向数据库中添加数据

显示页面(用户可见) <body><form action="chuli.php" method="post">  //将该页面接收的数据,交给chuli页面来处理<div>民族代号:<input type="text" name="code" /></div>       //创建一个div,放入接收器来接收code值<div>民族名称:<inpu

Sliverlight linq中的数组筛选数据库中的数据

首先 什么是linq呢 ? LINQ即Language Integrated Query(语言集成查询),LINQ是集成到C#和Visual Basic.NET这些语言中用于提供查询数据能力的一个新特性. 它是.NET框架的扩展,它允许我们以数据库查询的方式查询数据集合. 借助于LINQ技术,我们可以使用一种类似SQL的语法来查询任何形式的数据. 接下来讲讲我工作中用到的 linq中的数组筛选数据库中的数据 public List GetList1(string cardPhone,string

是用JDBC从数据库中获取数据并以java对象返回

/** * * @param c * for example Person.class * @param primaryKeys * primaryKeys为主键,参数顺序和表中保持一致 如果id, name 为主键 类名为Person 则 getEntity(Person.class,1,"name") * @return */ public static Object getEntity(Class c, Object... primaryKeys) { PreparedState

Eclipse中java向数据库中添加数据

前面详细写过如何连接数据库的具体操作,下面介绍向数据库中添加数据. 注意事项:如果参考下面代码,需要 改包名,数据库名,数据库账号,密码,和数据表(数据表里面的信息) 1 package com.ningmeng; 2 3 import java.sql.*; 4 5 /** 6 * 1:向数据库中添加数据 7 * @author biexiansheng 8 * 9 */ 10 public class Test01 { 11 12 public static void main(String

用java向mysql数据库中插入数据为空

利用java面向对像编程,向数据库中插入数据时.遇到插入的数据为空的情况.在此做一小结: 1.数据库连接正正常 2.sql语句没有问题 3.程序没有报异常 4.代码: import java.util.Scanner; import org.junit.Test;public class JDBCTest { //2).在测试方法testAAddStudent()中 //1.获取从控制台输入的Student对象:Student student=getStudentFromConsole(); /