mysql+python缺失数据库完善小脚本

先贴上一下,这两天写出来的小脚本,太波折啦,累死啦(有空再更新细节,)

需求:

有一个数据库你需要每天存在20家公司的信息,但是每家公司网站获取信息是有难度的,可能一天中你只能获取19或者18家公司的信息,但是你又不想今天的信息不完整,于是你想到一个好办法,今天没获取到信息的公司就用前一天的信息填充(前一天的肯定是完整的)。

设计思路

  • 判断当天是否缺少公司信息

  • 缺少的条件下,根据缺少的公司名字提取前一天的信息

  • 将提取的公司信息存入数据库(注意修改日期和时间之类的信息,更新为当天的)
    我的代码:

# -*- coding:utf-8 -*-
import MySQLdb
import json
from company import companys
import sys
reload(sys)
sys.setdefaultencoding('utf8')

#检测是否缺少数据
def check(id):
    sql = "select * from testtable2 where id = " + str(id)
    cursor.execute(sql)
    rs = cursor.fetchall()
    return len(rs)

#获取当天的信息,主要是为了插入数据时需要修改uptime
def uptime(id):
    sql = "select * from testtable2 where id = " + str(id)
    cursor.execute(sql)
    rs = cursor.fetchone()
    return rs


#获取缺少的公司名字列表
def lack(id):
    sql = "select * from testtable2 where id = " + str(id)
    cursor.execute(sql)
    rs = cursor.fetchall()
    if len(rs) == 21:
        temp = "无缺少数据"
        return temp
    else:
        temp = []
        res = []
        sql_1 = "SELECT name FROM testtable2 WHERE id = " + str(id)
        cursor.execute(sql_1)
        rs_1 = cursor.fetchall()
        for row in rs_1:
            temp.append(row[0])
        for row in companys:
            if row not in temp:
                res.append(row)
        return res

#获取一个公司的完整信息
def get_lack_data(id, name):

    name = name.decode('utf-8')
    sql ="SELECT * FROM testtable2 WHERE name = "+ "'"+name + "'" + " and id = " +  "'"+ id + "'"
    cursor.execute(sql)
    rs = cursor.fetchone()
    if cursor.rowcount>=1:
        return rs
    else:
        return "请将时间再提前一天"

#插入数据,这个需要注意两点:(1)插入信息的id要更新为当天 (2)插入信息的uptime需要更新为当天的
def index_data(id,data):
    res = []
    for row in data:
        res.append(row)
    #更新id
    temp = uptime(id)
    res[5] = temp[5]
    res[15] = id
    sql = "INSERT INTO `testtable2` (`Price_slide`, `name`, `Recognition_rate`, `nature`, `Introduction`, `uptime`, `Price_Chinese`, `Call_num`, `Price_letter`, `link`, `Company_name`, `Company_address`, `Price_Calculation`, `Price_Click`, `Price_QA`, `id`, `QQ_num`, `Price_Click_1w`, `Price_letter_1w`, `Price_Chinese_1w`, `Website_record`, `Price_QA_1w`) VALUES" + "(" +"'"+res[0]+"'"+","+"'"+res[1]+"'"+","+"'"+res[2]+"'"+","+"'"+res[3]+"'"+","+"'"+res[4]+"'"+","+"'"+res[5]+"'"+","+"'"+res[6]+"'"+","+"'"+res[7]+"'"+","+"'"+res[8]+"'"+","+"'"+res[9]+"'"+","+"'"+res[10]+"'"+","+"'"+res[11]+"'"+","+"'"+res[12]+"'"+","+"'"+res[13]+"'"+","+"'"+res[14]+"'"+","+"'"+res[15]+"'"+","+"'"+res[16]+"'"+","+"'"+res[17]+"'"+","+"'"+res[18]+"'"+","+"'"+res[19]+"'"+","+"'"+res[20]+"'"+","+"'"+res[21]+"'" +")"
    cursor.execute(sql)
    conn.commit()
    return "插入成功"

conn = MySQLdb.Connect(host = '127.0.0.1',port = 3306,  user = 'root',passwd = 'root',db = 'test',charset = 'utf8')
cursor = conn.cursor()

id = '20170808'
old_id = '20170807'

if check(id)== 21:
    print "信息完整!!!!"
else:
    res = lack(id)
    for row in res:
        print row
        data = get_lack_data(old_id, row)
        print (index_data(id,data))

print check(id)
conn.close()

遇到的问题

最多的问题就是编码问题,心累呀,第一处出现在根据缺少的公司信息获取前天公司的完整信息,mysql数据库里面是编码是utf-8,但是获取缺少公司的名字缺少unicode需要使用decode(‘utf-8’)进行转换一下(关于编码问题之前学了一点,如今应用到实际还是有点犯迷糊),之后就是更新数据这一项其实和前面的获取类似,刚开始因为里面有22列试了一下网上的方法:

#插入一条数据
sqli="insert into student values(%s,%s,%s,%s)"
cur.execute(sqli,('3','Huhu','2 year 1 class','7'))

结果一直显示mysql语法错误,后来才原来用%s转化为字符类型啦,编码不并没有改变,最后算是又采用了前面的比较复杂的方法,我一直觉得还是有简单的方法的,只是我能力有限。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 数据库课程设计mysql+python是一门将MySQLPython结合起来进行数据库设计的课程。学生将学习如何使用Python编写代码来连接MySQL数据库,并使用SQL语言进行数据查询、插入、更新和删除等操作。此外,学生还将学习如何设计数据库模式、表结构和索引等基本概念,以及如何使用Python编写脚本来自动化数据库管理任务。这门课程对于想要成为数据库开发人员或数据科学家的学生来说是非常有用的。 ### 回答2: 数据库是许多计算机专业需要学习的重要课程之一。在数据库课程中,学生需要学习使用不同的数据库管理系统以及如何设计和管理数据库系统。MySQLPython是这两个方面中最受欢迎的工具之一。 MySQL是一种开源的关系型数据库管理系统,使用SQL语言。学生可以通过学习MySQL来掌握基本的数据库概念和技巧。MySQL提供可扩展性和高性能,因此非常适用于大规模的数据处理。学生可以使用MySQL来创建和管理数据库,为数据库添加数据和查询数据。 Python是一种流行的编程语言,也被广泛用于数据库管理。Python提供了许多用于编写数据库应用程序的库和框架。这使得Python成为处理数据库的有力工具。学生可以利用Python编写脚本和程序来连接数据库,并创建和执行查询。Python还提供了许多有用的工具和库,例如Pandas和NumPy,可以用来在Python中更方便地处理数据。 在数据库课程中,学生将学习如何设计数据库系统,包括数据建模和规范化,以及如何使用SQL语言来查询数据库。学生还将学习如何使用Python来连接和管理数据库系统。在课程的最后,学生将完成一个数据库项目,他们将使用MySQLPython来设计和实现一个完整的数据库系统。这个项目将会提升学生实际操作的能力,让学生更好地掌握数据库的知识和应用技巧,为未来的职业发展提供更好的保障。 ### 回答3: 作为一个普遍使用的数据库管理系统,MySQL是许多数据驱动应用程序的首选,因此,掌握MySQL成为计算机专业学生的必修课程之一。在学习MySQL时,Python也是一个常用的编程语言。因此,将这两者结合起来研究,可以促进学生的综合学习。 数据库课程设计的主要任务是设计和实现一个完整的数据库系统。在本课程设计中,我们将使用MySQLPython实现一个简单但有用的数据库应用程序。首先,我们需要掌握MySQL数据库的基础知识,如数据库的结构、表和列、数据类型、索引和关系等。同时,需要学习MySQL的管理工具如MySQL Workbench,以及SQL语言的基本概念和语法。 接下来,我们将使用Python编写程序,完成与MySQL数据库的交互。Python提供了MySQL的连接库,我们可以通过这个库来调用各种MySQL API函数,包括连接数据库、查询、插入、更新和删除数据等。通过Python编写的程序,我们可以快速、准确地操作MySQL数据库,完成复杂的数据处理任务。 最后,我们将设计一个实际的数据库应用程序,例如一个新闻发布系统,一个博客网站,或者一个在线商店等。这个应用程序将利用我们学习到的MySQLPython知识,从数据库中读取信息,展示给用户,并且对用户的输入数据进行处理,存储到数据库中。通过这个项目,我们可以实践运用MySQLPython技术,体验开发一个完整的数据库应用程序的过程。 综上所述,学习数据库课程设计MySQLPython可以对计算机专业学生的编程和数据库管理能力进行有效提升,为日后的事业发展打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值