• 技术文章 >数据库 >mysql教程

    使用Python创建MySQL数据库实现字段动态增加以及动态的插入数据_MySQL

    不言不言2018-05-24 15:17:50原创3448
    应用场景:

    我们需要设计一个数据库来保存多个文档中每个文档的关键字。假如我们每个文档字符都超过了1000,取其中出现频率最大的为我们的关键字。

    假设每个文档的关键字都超过了300,每一个文件的0-299号存储的是我们的关键字。那我们要建这样一个数据库,手动输入这样的一个表是不现实的,我们只有通过程序来帮我实现这个重复枯燥的操作。

    具体的示意图如下所示:

    首先图1是我们的原始表格:

    \

    图1

    这个时候我们需要程序来帮我们完成自动字段的创建和数据的插入。

    \

    图2

    上图是我们整个表的概况。下面我们就用程序来总结出这样的一个表格是怎么实现的。

    '''
    function description : Add the fields and data dynamicly.
    
    data : 2014-08-04
    
    author : Chicho
    
    running : python addfileds.py
    
    '''
    
    import MySQLdb
    #connect the database
    #the argvs based on the database you set.
    #Generally speaking, you should change the No. of the port 3306 , because it's easy to be  attack
    #localhost = 127.0.0.1
    conn = MySQLdb.connect(host = 'localhost', port = 3306, user = 'root', passwd = '*****')
    curs = conn.cursor()
    
    # create a database named addtest
    #Ensure the program can run multiple times,we should use try...exception
    try:
        curs.execute('create database addtest')
    except:
        print 'Database addtest exists!'
    
    conn.select_db('addtest')
    
    # create a table named addfields
    try:
        curs.execute('create table addfields(id int PRIMARY KEY NOT NULL,name text)')
    except:
        print('The table addfields exists!')
    
    
    # add the fileds
    try:
        for i in range(1):
            sql = "alter table addfields add key%s text" %i
            curs.execute(sql)
    except Exception,e:
        print e
    
    
    for i in range(4): #insert 5 lines
        sql = "insert into addfields set id=%s" %i
        curs.execute(sql)
        sql = "update addfields set name = 'hello%s' where id= %s"%(i,i)
        curs.execute(sql)
        for j in range(5):
            sql = "update addfields set key%s = 'world%s%s' where id=%s"%(j,i,j,i)
            curs.execute(sql)
    
    #this is very important
    conn.commit()
    curs.close()
    conn.close()

    记住最后一定要记得最后三行这个语句,否则你的操作不会写入到数据库中。

    最后就可以得到我们的结果,如下图所示:

    \

    程序的大体实现就是这样。

    彩蛋:

    1.操作数据库出现的一些错误总结

    如果你长时间为队数据库进行操作,再次进行操作的时候可能会出现以下错误:

    raise errorclass, errorvalue
    OperationalError: (2006, 'MySQL server has gone away')

    这个时候对于MySQL server 你要做的就是执行一下下面这个命令

    connect your_database

    对于在python中的IDLE你需要执行:

    conn = MySQLdb.connect(host = 'localhost', port = 3306, user = 'root', passwd = '****')
    curs = conn.cursor()
    conn.select_db('addtest')

    密码输入你自己数据库中设置的。

    2.UnicodeEncodeError: 'latin-1' codec can't encode characters in position

    出现上述这个错误的时候可以采用下面这个方法就可以解决。

     conn.set_character_set('utf8')
        curs.execute('set names utf8')
        curs.execute('SET CHARACTER SET utf8;')
        curs.execute('SET character_set_connection=utf8;')

    conn,curs和本文中参数设置是一样的。

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:动态 字段 数据库
    上一篇:【MySQL案例】mysql本机登录-S失效_MySQL 下一篇:Mysql安装完毕运行时没有mysql和performance_schema数据库_MySQL
    Web大前端开发直播班

    相关文章推荐

    • union all在mysql中的用法是什么• 一文搞懂MySQL数据库怎么备份与恢复• mysql怎么增加权限• 夯实MySQL基础的问题归纳• 深入浅析MySQL查询语句的执行过程

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网