# -*- coding: UTF-8 -*-
import MySQLdb as mdb
import math
import sys
import random
con = mdb.connect('localhost', 'root', 'root', 'python_test')
with con:
# 获取连接的cursor对象
cur = con.cursor()
# 建表(该表不存在时才会建立)
table_name = "pytest"
create_command = "CREATE TABLE IF NOT EXISTS " + table_name + "(id int auto_increment PRIMARY KEY , device_no VARCHAR(50), sumTime int(20))"
cur.execute(create_command)
# 插入的第1种方式(麻烦,但Java中采用这种方式)
# 插入之前所有字段都要转成str类型
# 虽然插入之前所有字段都要转成str,但在表中是什么类型还是由建表语句指定的(float还是float,int还是int)
# 0-199
for i in range(200):
device_no = "zhxxxxx"+str(i)
sumTime = random.randint(0, 1000)
insert_command = "INSERT INTO " + table_name + "(device_no,sumTime) VALUES("\
+"'"+device_no+"'"+","\
+"'"+str(sumTime)+"'"\
+")"
cur.execute(insert_command)
# 插入的第2种方式(简洁)
# 200-299
for i in range(200,300):
device_no = "zhxxxxx"+str(i)
sumTime = random.randint(0, 1000)
value =[device_no, sumTime]
insert_command = "INSERT INTO " + table_name + "(device_no,sumTime) VALUES(%s,%s)"
cur.execute(insert_command, value)
# 遍历
var = 20 # id
select_command = "SELECT * FROM pytest WHERE id >= " + str(var) +" order by sumTime limit 300 "
print select_command
cur.execute(select_command) # cur相当于java中的statement
rows = cur.fetchall()
print "第0行第1列元素为:%s" % rows[0][1]
print "第0行第2列的sumTime类型为:%s" % type(rows[0][2])
print "id>=20 的前300台设备号并按照sumTime排序:"
for row in rows:
id = row[0]
device_no = row[1]
sumTime = row[2]
print "%d %s %d" % (id, device_no, sumTime)
# 将所有设备号放入IDList
# 开始时想直接创建一个set,在遍历rows过程中就完成去重,后来失败,所以先创建list,再转成set
IDList = []
for row in rows:
if row[1] == None: # 如果该字段device_no为Null,则不加入set
continue
else:
IDList.append(row[1]) # device_no
# 对设备号去重
IDSet = set(IDList)
IDLen = IDSet.__len__()
print "不重复的设备号为:"
# for device_no in IDSet: # 遍历set
# print device_no
cur.close()
con.close()
代码使用方法:先在本地建立名为python_test的数据库,将上述代码复制到pycharm或者eclipse,运行结束后会自动在该数据库下生成一个表pytest,该表有三个字段id,device_no,sumTime,其中id字段为主键,int类型,自增;device_no表示设备号,varchar类型,sumTime表示总时间,int类型。
代码完成以下功能:
建表
两种方式的插入
查询
统计所有不重复的设备号放入一个set