欢迎光临
一起学习,一起进步

python 格式化操作mysql

使用Python创建MySQL数据库实现字段动态增加以及动态的插入数据
应用场景:
我们需要设计一个数据库来保存多个文档中每个文档的关键字。假如我们每个文档字符都超过了1000,取其中出现频率最大的为我们的关键字。
假设每个文档的关键字都超过了300,每一个文件的0-299号存储的是我们的关键字。那我们要建这样一个数据库,手动输入这样的一个表是不现实的,我们只有通过程序来帮我实现这个重复枯燥的操作。
具体的示意图如下所示:
首先图1是我们的原始表格:
\
图1
这个时候我们需要程序来帮我们完成自动字段的创建和数据的插入。
\
图2
上图是我们整个表的概况。下面我们就用程序来总结出这样的一个表格是怎么实现的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
'''
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()

记住最后一定要记得最后三行这个语句,否则你的操作不会写入到数据库中。最后就可以得到我们的结果,如下图所示:
\
程序的大体实现就是这样。
参考文献:
https://www.cnblogs.com/rollenholt/archive/2012/05/29/2524327.html
https://www.blogjava.net/alpha/archive/2007/07/23/131912.html
https://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你需要执行:

1
2
3
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

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

1
2
3
4
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和本文中参数设置是一样的。

赞(0) 打赏
未经允许不得转载:openSL » python 格式化操作mysql

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏