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

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

不言
不言Original
2018-05-24 15:17:504433browse

应用场景:

我们需要设计一个数据库来保存多个文档中每个文档的关键字。假如我们每个文档字符都超过了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和本文中参数设置是一样的。     

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn