python动态生成数据库表_使用Python创建MySQL数据库实现字段动态添加以及动态的插入数据...

应用场景:

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

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

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

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

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

20140804201047265

图1

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

20140804201634195

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

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

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

20140804202721596

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

參考文献:

感谢楼上几位博主的无私奉献精神。博主是在没有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和本文中參数设置是一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值