美文网首页不好的测试代码
2019-04-27 Python系列-利用Pymysql连接m

2019-04-27 Python系列-利用Pymysql连接m

作者: Python岳 | 来源:发表于2019-04-27 14:25 被阅读0次

    ······缘由:

    数据去重,可以使用SET,
    也可以使用mysql的唯一主键,
    或者使用redis。
    但是设置唯一主键,爬虫写入很慢。
    XP系统原先折腾过redis,但是前段时间又不会折腾了。
    总之XP折腾redis很麻烦,吃力不讨好。

    问了一下某个群的大佬,
    推荐给我的技术是

    首先,确认mysql中没数据,
    然后将文本MD5,存到数据库内容后面的表里面。

    写入数据的时候,
    将 要写入的文本MD5化,和mysql里面的md5进行对比。
    据说,MD5对比,比数字对比更快一些。
    所以有了以下的代码。

    ······考虑/疑惑/缺点:

    边对比MD5边写数据到MYSQL,数据量少还没问题,
    数据量大起来,每次做读取,消耗的时间成倍提高,
    可能最好先将数据库中的MD5放到一个字典或者元组中,
    采集过来的数据MD5,和字典或者元组进行对比,
    然后一次性的写入。
    这样可能性能会更好一些。

    另外从数据库中读取的内容,是tuple类型,
    里面有多余的括号,以及数据。
    这些数据整体str后,
    占用内存也会比较大(不知道有没有这种理论)

    ······代码:

    #! /usr/bin/env python
    # -*- coding: UTF-8 -*-  
    import pymysql
    import hashlib   
    
    #文本
    f_content = "ddsfsSQL入sdfsdfsdfd"
    #文本MD5
    m = hashlib.md5()
    mm = m.update(bytes(f_content,encoding='utf-8'))
    print ("文本md5:",m.hexdigest())
    #文本MD5
    
    #连接pymysql
    data_base = pymysql.connect(
            host='localhost',
            user='root',
            password='root',
            port=3306,
            charset='utf8',
            db='test')
    cursor = data_base.cursor()
    
    try:
            #查询mysql
            sql_SELECT = "SELECT * FROM test_md5"
            cursor.execute(sql_SELECT)
            data_base.commit()
            #查询mysql结束     
            #读取数据
            res = cursor.fetchall()
            res = str(res)
            #判断mysql是否有数据。
            if res!=0:
                    if m.hexdigest() in res:
                            print ('要写入的文本已存在。不写入')
                            pass
                    else:
                            #数据写入
                            print ('正在写入%s: '%(f_content))
                            sql_INSERT = "INSERT INTO test_md5 (content,content_md5) VALUES ('%s','%s')" % (f_content,m.hexdigest())
                            cursor.execute(sql_INSERT)
                            data_base.commit()
            else:
                    print ("数据库没数据")
                            
    except ValueError as e:
            print(e)
            data_base.rollback()
    finally:
            cursor.close()
            data_base.close()
    
    

    相关文章

      网友评论

        本文标题:2019-04-27 Python系列-利用Pymysql连接m

        本文链接:https://www.haomeiwen.com/subject/dsfknqtx.html