为什么要定义一个类:这里是从网上查到的:
之前的编程都是基于过程,最多就是把过程提取出来,形成函数,但一旦有大量的相似重复的数据时,不以数据为中心反而不好管理,比如需要用到很多学生、老师、工人,之前最好的方式就是定义class,但这样既不方便又不安全,而且不能处理学生、老师、工人的一些动作,只要涉及动作,就要定义函数。
于是把数据抽象化,提取出一些特征,就有了成员变量。此外,还可以对抽象的“类”定义动作,专属于它的动作,就有了成员函数。把成员函数和成员变量“包装”到一起,就形成了类。
成员函数和成员变量,都有着这三种属性。
私有,体现在封装上,有些成员只允许类自己访问,外界只能通过(唯一)定义的公共成员函数去访问,这样这些私有的成员如果不对劲了,问题肯定出在(唯一)定义的公共成员函数,一安全,二也好定位问题。
保护,体现在继承上,会有这样的需求:父类的某些成员允许子类访问,但不许外界访问,介于二者之间,产生了保护属性。
公共,不言而喻,定义一个类,目的还不是为了让人用......
类是抽象的,对象是具体的。比如学生是一个类,抽象,泛指一种人,有很多特征和动作,比如姓名、学校,吃饭、上课。学生-小明,就是个具体的对象。
类就是一个模子,别人也可以使用,可以导入不同的参数和数据,实现不同具体环境下的任务功能
import pymysql
class Mydb:
#定义一个类
#参数传递的时候可以直接用字典 使用的时候传入 **类名.参数变量
config={
"host":"localhost",
"user":"root",
"password":"root",
"db":"music_project",
"charset":"utf8"
}
#定义内部的参数
def __init__(self):
self.connection = pymysql.connect(**Mydb.config)
self.cursor= self.connection.cursor()
#定义一个关闭的函数
def close(self):
if self.cursor:
self.cursor.close()
if self.connection:
self.connection.close()
#插入 修改 删除调用 *参数,可变参数
def exeDML(self,sql,*args):
try:
#执行sql
count = self.cursor.execute(sql,args)
id = self.connection.insert_id()
#提交事务
self.connection.commit()
return id
except Exception as e:
print(e)
if self.connection:
self.connection.rollback()
finally:
self.close()
def query_one(self,sql,*args):
try:
#执行sql
self.cursor.execute(sql,args)
#获取结果集
return self.cursor.fetchone()
except Exception as e:
print(e)
finally:
self.close()
def query_all(self,sql,*args):
try:
#执行sql
self.cursor.execute(sql,args)
#获取结果集
return self.cursor.fetchall()
except Exception as e:
print(e)
finally:
self.close()
if __name__ == "__main__":
dbutil = Mydb()
#sql = "insert into emp (empno,ename,sal) values(%s,%s,%s)"
#count = dbutil.exeDML(sql,9999,'lili',12000)
#print(count)
#sql = "select * from emp where empno=%s"
#emp = dbutil.query_one(sql,7788)
#print(emp)
sql = "select * from emp"
emps = dbutil.query_all(sql)
for e in emps:
print(e,end="\n")
import pymysql
connection = None
cursor = None
try:
connection = pymysql.connect(host='localhost',port=3306,user='root',password='Ww#09182415',db='test04',charset='utf8')
#print(conncetion)
#获取cursor对象
cursor=connection.cursor()
#编写SQL语句 在这里编写SQL语句,之后传进去
#传值得时候,只用占位符,重新写值得参数,传入一个args元组,也就是说,要把数据转化成元组之后再传到数据库里面
#sql = 'select * from emp'
sql = 'insert into emp(empno,ename) values(%s,%s)'
args = (1234,'mary')
#执行SQL语句
count = cursor.execute(sql,args)
#查看结果数据集
# emps = cursor.fetchall()
# #print(emps,type(emps))
# for e in emps:
# print(e,'\n')
#打印影响了多少条语句
print('count',count)
#提交事务,就可以更改数据库了
connection.commit()
except Exception as e:
print(e)
#如果有异常,事务回滚
connection.rollback()
finally:
if cursor :
cursor.close()
if connection:
connection.close()