美文网首页
Python3链接使用MySQL

Python3链接使用MySQL

作者: c4a1d989518e | 来源:发表于2017-10-28 19:16 被阅读53次

    开始使用Python3了,使用Python3最先写的是一个小的脚本,实现的需求就是,在数据库中插入1000条数据,方便进行接口测试。这1000条数据并不是随便插入的,比如说订单号,首先这个订单号要存储于其另一个表中,而且在另一个表中的某个字段也要符合要求。总之,并不是操作单个表,而是3个表的操作。我想还是用Python3吧。

    python3连接mysql数据库的包有一些,python2和python3是不同的包,用python3时,使用的是pymysql这个包。它的菜鸟教程在这里,在这里可以查看出操作数据库的种种方法。

    pip3 install PyMySQL
    

    伪造数据常用代码

    具体的使用数据库的方法,查看那个连接就好了,记录下,我的其他增加的代码,如插入订单号

    order=random.sample(range(10,20),10)
    

    这个代码可以生成10个10~20之间的数字,而且不是重复的。
    伪造订单时间

    a=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    

    还有就是伪造11位的手机号,一行代码搞定

    phone_number=str(random.choice(['139','188','185','136','158','151'])+"".join(random.choice("0123456789") for i in range(8)))
    

    连接数据库的示例中

    db = pymysql.connect("localhost","testuser","test123","TESTDB" )
    

    【localhost】是数据库的地址,【testuser】是用户名,【test123】是密码,【TESTDB】是库名,注意是库名,不是自己定义的名字。一般打开数据库后,映入眼帘的就是以古希腊众神命名的数据库,数据库中有表。
    但是如果只填入这个还不行,会有这样的错误

    UnicodeEncodeError: 'latin-1' codec can't encode character '\u2013' in position 637: ordinal not in range(256)

    出现这样的错误,需要在其中添加charset='utf8',具体回答可看此

    关于数据的操作还有要注意的是【UPDATE】是用来更改数据库表中的字段的内容的,而【INSERT】是插入数据,在空白处添加数据的。

    批量写入数据库

    还有关于批量写入数据,不要用for循环来频繁操作数据库,批量写入数据,可以用executemany

    # 批量插入executemany  
    def insert_by_many(table):  
        nrows = table.nrows  
        param=[]  
        for i in xrange(1,nrows):  
            # 第一列username,第二列salt,第三列pwd  
            param.append([table.cell(i, 0).value, table.cell(i, 1).value, table.cell(i, 2).value])  
        try:  
            sql = 'INSERT INTO user values(%s,%s,%s)'  
            # 批量插入  
            cur.executemany(sql, param)  
            conn.commit()  
        except Exception as e:  
            print e  
            conn.rollback()   
        print '[insert_by_many executemany] total:',nrows-1   
      
    

    其中param的list字段,executemany会自动遍历。此方法是从这篇文章看到的Python MySQLdb 循环插入execute与批量插入executemany性能分析

    参考文章

    'latin-1' codec can't encode character '\u2013' in position 637: ordinal not in range(256)
    Python3 MySQL 数据库连接

    Python MySQLdb 循环插入execute与批量插入executemany性能分析

    相关文章

      网友评论

          本文标题:Python3链接使用MySQL

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