python入门二(数据库操作)

python对数据库的支持很多比如小的有sqllite、大的服务关系型数据库 mysql、非关系型数据库mongodb等,这里我们就来看看python和mysql的适配使用,本人安装的python是3.6版本的所以使用的是pymysql模块,具体安装在第一篇文章中有哦……

下面来看看代码:

import pymysql
from test.test_robotparser import PasswordProtectedSiteTestCase

#dicts
dbdict={"testdb":{"host":"127.0.0.1","port":3306,"user":"root","passwd":"admin","db":"test","charset":"utf-8"},
        "userdb":{"host":"127.0.0.1","port":3306,"user":"root","passwd":"admin","db":"user","charset":"utf-8"}}
class dball(object):
    def __init__(self,name,dicts):
        self.name= name
        self.host=dicts["host"]
        self.port =dicts["port"]
        self.user =dicts["user"]
        self.passwd =dicts["passwd"]
        self.db =dicts["db"]
        self.charset = dicts["charset"]
        print("init complete")
    def getConnection(self):
        cnx = pymysql.connect(host=self.host,port =self.port,user=self.user,passwd=self.passwd,db=self.db)
        return cnx
    def getDicCursor(self,cnx):
        cursor = cnx.cursor(pymysql.cursors.DictCursor)
        return cursor
    def getCursor(self,cnx):
        cursor = cnx.cursor()
        return cursor
    def closeCursor(self,cursor):
        if cursor is not None:
            cursor.close()
            print(str(self.name)+" cursor is closed")
            return True
        elif cursor is None:
            print(str(self.name)+" cursor is None")
            return True
        else :
            print(str(self.name)+" cursor close failed")
            return False
        
    def closeCnx(self,cnx):
        if cnx is not None:
            cnx.close()
            print(str(self.name)+" cnx is closed")
            return True
        elif cnx is None:
            print(str(self.name)+" cnx is None")
        else:
            print(str(self.name)+" cnx closed failed")
            return False
    def queryDic(self,sqls,cursor):
        len = cursor.execute(sqls)
        result = cursor.fetchall()
        self.closeCursor(cursor)
        mydicts={"len":len,"result":result}
        return mydicts
        
    def chancelResult(self,dict):
        if dict is not None:
            nameList =[]
            for res in dict:
               name = res["name"]
               nameList.append(str(name))
            count =nameList.count("110")
            print("count: "+str(count))
        elif dict is None:
            print(str(self.name)+" result is none")
        else:
            print("want to do ?")
            
if __name__ =="__main__":
    dbtest1 = dball("dbtest1",dbdict["userdb"])
    con = dbtest1.getConnection()
    cursor =dbtest1.getDicCursor(con)
    sql ="SELECT id,name FROM user"
    dictresult = dbtest1.queryDic(sql, cursor)
    len = dictresult["len"]
    result =dictresult["result"]
    dbtest1.chancelResult(result)
    print("len:"+str(len) +" result:"+str(result) )
    print("query end")
    dbtest1.closeCnx(con)
        

运行结果:

init complete
dbtest1 cursor is closed
count: 3
len:13 result:[{'id': '1', 'name': '12'}, {'id': '110', 'name': '110'}, {'id': '1101', 'name': '110'}, {'id': '1102', 'name': '110'}, {'id': '120', 'name': '120'}, {'id': '121', 'name': '121'}, {'id': '122', 'name': '122'}, {'id': '124', 'name': '124'}, {'id': '125', 'name': '125'}, {'id': 'whd1', 'name': 'whd1'}, {'id': 'whd2', 'name': 'whd2'}, {'id': 'whd3', 'name': 'whd3'}, {'id': 'whd5', 'name': 'whd5'}]
query end
dbtest1 cnx is closed

ok 下面来看看代码中的知识点:

1、首先定义了一个dbdict 字典,该字典中保存了我们可能用到的数据库相关信息

2、定义了一个dball类,这个类中包括了数据库相关的所有方法

3、 dbtest1 = dball("dbtest1",dbdict["userdb"]) 创建类实例,第一个参数是该实例的name属性的值第二个值也是我们定义的字典中数据库的信息,这样__init()__方法就会被自动执行而给实例的各个属性赋值即host 、port、use 、passwd、db等

4、 con = dbtest1.getConnection() 调用对象的方法获取数据库链接,具体是使用了pymysql.connect()方法来实现。

5、cursor =dbtest1.getDicCursor(con) 获取游标,你可能看到了有两种获取游标的方法,其中一种是字典型的而另一种就是元组型的,这个和查询出来的结果是有关的,两种的结果格式就是一种是字典型的而另一种就是元组如下:

result:[{'id': '1', 'name': '12'}, {'id': '110', 'name': '110'}, {'id': '1101', 'name': '110'}]

result:(('1', '12'), ('110', '110'), ('1101', '110'))

ok这就是两种格式

6、 dictresult = dbtest1.queryDic(sql, cursor) 拿着游标去查询,具体的查询也是使用游标提供的 cursor.execute(sqls)方法来执行。

result = cursor.fetchall() 来获取查询到的所有数据

7、处理结果方法,遍历查询结果进行一些统计计算……




你可能感兴趣的:(python)