mysql表使用python脚本建立数据表包含多个分区

#coding=utf-8
import MySQLdb
import datetime
db = MySQLdb.connect(host="localhost",user="root",passwd="123456",db="yuht",charset="utf8")
cursor = db.cursor()
string_sql="("

begin = datetime.date(2017,8,1)
end = datetime.date(2019,7,31)
l=[]
d = begin
delta = datetime.timedelta(days=1)
su=0
while d <= datetime.date(2020,4,26):
	su=su+1
	#print d.strftime("%Y-%m-%d")
	d += delta
	l.append(d)
print su
j = 0
for i in l[:len(l)-1]:
	j = j + 1
	string_sql=string_sql+"PARTITION p%d VALUES LESS THAN (to_days('%s'))," % (j,i)
string_sql=string_sql+"PARTITION p1000 VALUES LESS THAN (to_days('2020-04-27')))"
print string_sql
string2="(PARTITION p1 VALUES LESS THAN (to_days('2017-07-26')),PARTITION p2 VALUES LESS THAN (to_days('2017-07-27')),PARTITION p3 VALUES LESS THAN (to_days('2017-07-28')))"
#print string2
def create_table_uv_report(cursor):
	sSql2 = "CREATE TABLE `new223` (\
		`id` bigint(20) NOT NULL AUTO_INCREMENT,\
		`date` date NOT NULL COMMENT '日期',\
		`src_id` bigint(20) NOT NULL COMMENT '广告位ID',\
		`media_id` varchar(64) COLLATE utf8_unicode_ci NOT NULL COMMENT '媒体ID',\
		`session` bigint(20) NOT NULL DEFAULT 0 COMMENT 'session数',\
		`imei_mac` bigint(20) NOT NULL DEFAULT 0 COMMENT 'IMEI_MAC数',\
		`dhid` bigint(20) NOT NULL DEFAULT 0 COMMENT 'DHID数',\
		`request_pv` bigint(20) NOT NULL DEFAULT 0 COMMENT '请求数',\
		`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,\
		PRIMARY KEY (`id`,`date`),\
		UNIQUE KEY `QUERY_KEY` (`date`,`src_id`,`media_id`),\
		KEY `date` (`date`),\
		KEY `src_id` (`src_id`),\
		KEY `media_id` (`media_id`)\
		) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci \
		partition by range (to_days(date)) \
		%s" % string_sql
#	print sSql2
#	cursor.execute("drop table if exists `37`")
	cursor.execute(sSql2)

def create_table_uv_hour_report(cursor):
	sSql1 = "CREATE TABLE `new224` (\
		`id` bigint(20) NOT NULL AUTO_INCREMENT,\
		`date` date NOT NULL COMMENT '日期',\
		`hour` int(8) NOT NULL COMMENT '小时(0~23)',\
		`src_id` bigint(20) NOT NULL COMMENT '广告位ID',\
		`media_id` varchar(64) COLLATE utf8_unicode_ci NOT NULL COMMENT '媒体ID',\
		`session` bigint(20) NOT NULL DEFAULT 0 COMMENT 'session数',\
		`imei_mac` bigint(20) NOT NULL DEFAULT 0 COMMENT 'IMEI_MAC数',\
		`dhid` bigint(20) NOT NULL DEFAULT 0 COMMENT 'DHID数',\
		`request_pv` bigint(20) NOT NULL DEFAULT 0 COMMENT '请求数',\
		`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,\
		PRIMARY KEY (`id`,`date`),\
		UNIQUE KEY `QUERY_KEY` (`date`,`hour`,`src_id`,`media_id`),\
		KEY `date` (`date`),\
		KEY `hour` (`hour`),\
		KEY `src_id` (`src_id`),\
		KEY `media_id` (`media_id`)\
		) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci \
		partition by range (to_days(date)) \
		%s" % string_sql
	cursor.execute(sSql1)
create_table_uv_report(cursor)
print "create_table_uv_report is :ok"
create_table_uv_hour_report(cursor)
print "create_table_uv_hour_report is :ok"
cursor.close()
db.close()

mysql数据库大家都用过,大家建立分区的话,一共有四种方式,如果建立比较少的分区的话可以用:


partition by range (to_days(date)),但是如果建立的表比较复杂以及分区比较多,比如要建立1000个分区的话(mysql最多只能有1024个分区),最好还是写代码建立,今天就和大家分享一下我昨天用python脚本来建立数据库表并实现1000个分区的工作。首先我的脚本是在windows下面编辑的,放到ubuntu里面执行的时候执行不了,后来才知道要更改文件保存格式(在notepad里面的编辑里的格式转换),然后还有一个需要注意的地方,就是python的缩进只能用一种方式,要不用空格,要不用tab,两个同时用,尽管格式上看不出来,但是会报错。利用python建立mysql的数据库表需要提前安装mysql数据库和MySQLdb这个库,可以用apt-get install 来安装。下面直接上代码:

下面是运行结果:

mysql表使用python脚本建立数据表包含多个分区_第1张图片


你可能感兴趣的:(mysql表使用python脚本建立数据表包含多个分区)