创建表
create table test(
id int unsigned primary key auto_increment not null,
name varchar(150) not null,
timestamp varchar(50) not null);
数据库的增删改查
from pymysql import *
import numpy as np
# 增删改涉及到数据库的变更,查询不改变数据库
# pymysql中凡是涉及到数据库的增删改时,如果不输入commit,数据是不会插入表中,但是每次插入值之后(不提交)数据表的id字段(auto increament)还是增加的,通过show create table table名查看,目的是解决高并发
# 过程中的错误,实际应用中,数据库中值得插入属于高并发模式,哪个先抢到即先占领ID字段的值,防止后面多个插入进行提交之后造成的混乱错误.
# 不管是增删改哪一种,只要commit之后数据开始生效.
# 如果数据插入错误,可以采用回滚rollback函数实现,前提是不提交,只要一提交数据就生效,注意的是如果进行增删改操作,但是发现数据有误就不提交,且进行了rollback,如果再进行新的增删改操作并
# commit提交,因之前进行的错误增删改操作而造成的id字段增长不会倒回去,只能在之前的基础上继续增长.
class JD(object):
def __init__(self):
# 创建connection连接 连接对象
self.conn = connect(host="localhost", port=3306, user='root', password='123456', database='python_test', charset='utf8')
# 获取Cursor对象 游标对象
self.cursor = self.conn.cursor()
def __del__(self):
# 关闭cursor对象
self.cursor.close()
self.conn.close()
def execute_sql(self, sql):
self.cursor.execute(sql)
# all_name=self.cursor.fetchall()
json_data = []
for temp in self.cursor.fetchall():
# print(temp[0])
json_data.append(temp[0])
return json_data
def execute_sql_all(self, sql):
self.cursor.execute(sql)
# all_name=self.cursor.fetchall()
json_data = []
for temp in self.cursor.fetchall():
# print(temp[0])
json_data.append(temp)
return json_data
def show_all_items(self):
sql = "select * from test;"
a=self.execute_sql_all(sql)
return a
def show_cates(self):
sql = "select name from test;"
a=self.execute_sql(sql)
return a
def add_brands(self,name,device_time):
sql = 'insert into test(name,timestamp) values(%s,%s)'
# *****************************************************************#
self.cursor.execute(sql, ([name,device_time]))
self.conn.commit()
print('***********************************************************{}成功写入数据库'.format(name))
return True
def get_information(self,timestamp):
if '{}'.format(timestamp) not in self.show_cates():
return False
else:
self.cursor.execute("select * from test where timestamp ='%s'" % timestamp)
return self.cursor.fetchone()
def del_infor(self,del_num):
sql_delete = "delete from test where id=%s" % del_num
self.execute_sql(sql_delete)
self.conn.commit()
return 'success'
@staticmethod #实例方法 不需要self
def print_menu():
print("********************************************************")
print("* 欢迎来到监控人员系统 *")
print("*1.查看所有录入信息 2.所有的成员名字 *")
print("*3.添加成员信息 4.删除成员信息 *")
print("*5.获取指定时间信息 6.退出系统 *")
print("********************************************************")
num = input("请输入对应功能序号:")
return num
def run(self):
while True:
num = self.print_menu()
if num == "1":
result = self.show_all_items()
print(result)
elif num == "2":
result = self.show_cates()
print(result)
elif num == "3":
# name = input("请输入你的名字:")
# list_inf = list(map(int, input('请输入一串数字作为数组:').split())) # 一行输入多个数字,空格隔开,存入数组a中
name = '赵zyy'
timestamp='2021_12_28_10_03'
result = self.add_brands(name,timestamp)
elif num == "4":
del_num = input("请输入您要删除学生的序号:")
result = self.del_infor(del_num)
print("删除成功!{}".format(result))
elif num == "5":
timestamp = input("请输入你想要查询的时间:")
self.get_information(timestamp)
elif num == "6":
exit()
else:
print("输入有误,请重新输入!")
# 面向对象的优点:能封装的尽量封装,调用者很简单,嵌套调方法也很容易,这些基本的方法放进一个基类中,通过类的继承,可以重新写一些新的方法。
def main():
#创建一个京东商城对象
jd = JD()
#调用这个对象的run方法
jd.run()
if __name__ == "__main__":
main()