zoukankan      html  css  js  c++  java
  • 使用Python创建MySQL数据库实现字段动态添加以及动态的插入数据

    应用场景:

    我们须要设计一个数据库来保存多个文档中每一个文档的keyword。

    假如我们每一个文档字符都超过了1000,取当中出现频率最大的为我们的keyword。

    如果每个文档的keyword都超过了300,每个文件的0-299号存储的是我们的keyword。那我们要建这样一个数据库。手动输入这种一个表是不现实的。我们仅仅有通过程序来帮我实现这个反复枯燥的操作。


    详细的示意图例如以下所看到的:

    首先图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()
    
        
    

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

    最后就能够得到我们的结果,例如以下图所看到的:


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



    參考文献:

    http://www.cnblogs.com/rollenholt/archive/2012/05/29/2524327.html

    http://www.blogjava.net/alpha/archive/2007/07/23/131912.html

    http://database.51cto.com/art/200811/97974_all.htm

    感谢楼上几位博主的无私奉献精神。博主是在没有MySQL 的基础上參照这些blog实现的。如有什么地方不足欢迎提出

    批评和建议。对你的意见我在此表示由衷的感谢。



    彩蛋:

    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')
    password输入你自己数据库中设置的。


    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和本文中參数设置是一样的。












    转载请注明出处,http://blog.csdn.net/chichoxian/article/details/38224361,谢谢合作^^












  • 相关阅读:
    Java 泛型初识
    Java 设计模式之装饰模式
    深入理解Java 虚拟机 之垃圾收集器与内存分配策略
    (转)MySQL字段类型
    Eclipse 远程调试
    深入理解Java 虚拟机 之自动内存管理
    JAVA对象向上转型和向下转型
    JavaSE(二)之变量与常量、运算符、类型转换
    Maven(四)之archetype插件的使用
    Hibernate(五)之一对多&多对一映射关系
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/6772785.html
Copyright © 2011-2022 走看看