代码改变世界

python数据库处理——MySql数据库三层架构

2020-09-10 11:36  idea555  阅读(213)  评论(0)    收藏  举报

首先要下载安装MySQLdb http://sourceforge.net/projects/mysql-python/ 

win7 64位安的时候有点儿费劲,只找到了1.2.3版本的,但是可用 http://www.codegood.com/archives/129

 

下面进入正题,三层架构我也没怎么学过,大概凭理解和看别人的代码弄出来一个,不知道理解的对不对,还望高手指教

代码的源码在这里:http://download.csdn.net/detail/huang369509940/6851801

先是数据库层面的:

MySqlHelper:

 

  1.  
    import MySQLdb
  2.  
    class MySqlHelper:
  3.  
    '''
  4.  
    实现数据库具体操作的类
  5.  
    '''
  6.  
    def __init__(self, SQLINFO):
  7.  
    try:
  8.  
    import MySQLdb
  9.  
    except ImportError,e:
  10.  
    raise e
  11.  
    try:
  12.  
    host=SQLINFO['host']
  13.  
    user=SQLINFO['user']
  14.  
    passwd=SQLINFO['password']
  15.  
    port=SQLINFO['port']
  16.  
    db=SQLINFO['db']
  17.  
    charset=SQLINFO['charset']
  18.  
    self.conn=MySQLdb.connect(host=host,user=user,db=db,passwd=passwd,port=port,charset=charset) #连接
  19.  
    self.cursor=self.conn.cursor() #游标对象
  20.  
    except Exception,e:
  21.  
    raise e
  22.  
     
  23.  
    '''
  24.  
    函数名:Finish
  25.  
    输入:无
  26.  
    功能:提交数据库操作并关闭数据库连接
  27.  
    输出:无
  28.  
    '''
  29.  
    def Finish(self):
  30.  
    try:
  31.  
    self.conn.commit()
  32.  
    self.conn.close()
  33.  
    self.cursor.close()
  34.  
    except Exception,e:
  35.  
    raise e
  36.  
     
  37.  
    '''
  38.  
    函数名:CreateDB
  39.  
    输入:数据库名称
  40.  
    功能:创建数据库
  41.  
    输出:无
  42.  
    '''
  43.  
    def CreateDB(self,db):
  44.  
    try:
  45.  
    self.cursor.execute('create database %s' %db)
  46.  
    self.Finish()
  47.  
    except Exception,e:
  48.  
    raise e
  49.  
     
  50.  
    '''
  51.  
    函数名:ExecuteNonQuery
  52.  
    输入:待执行的非查询SQL语句
  53.  
    功能:执行sql语句
  54.  
    输出:受影响的行数
  55.  
    '''
  56.  
    def ExecuteNoQuery(self,SQLstring):
  57.  
    try:
  58.  
    count=self.cursor.execute(SQLstring)
  59.  
    self.Finish()
  60.  
    return count
  61.  
    except Exception,e:
  62.  
    raise e
  63.  
    return -1
  64.  
     
  65.  
    '''
  66.  
    函数名:ExecuteQuery
  67.  
    输入:待执行的查询SQL语句
  68.  
    功能:执行sql语句
  69.  
    输出:查询的结果集
  70.  
    '''
  71.  
    def ExecuteQuery(self,SQLstring):
  72.  
    try:
  73.  
    self.cursor.execute(SQLstring)
  74.  
    result=self.cursor.fetchall() #接收全部的返回结果行
  75.  
    self.Finish()
  76.  
    return result
  77.  
    except Exception,e:
  78.  
    raise e
  79.  
    return None
  80.  
     
  81.  
    '''
  82.  
    函数名:GetStringForList
  83.  
    输入:待合并的列表
  84.  
    功能:把列表进行合并
  85.  
    输出:合并后的字符串
  86.  
    '''
  87.  
    def GetStringForList(list):
  88.  
    str=''
  89.  
    for elem in list:
  90.  
    str+=elem+' '
  91.  
    return str



学生类:

 

  1.  
    class student:
  2.  
    '''
  3.  
    学生表
  4.  
    '''
  5.  
    def __init__(self,ID=None,Name=None,age=None):
  6.  
    self.ID=ID
  7.  
    self.Name=Name
  8.  
    self.age=age



然后是业务逻辑层的:

 

  1.  
    from Helper.MySqlHelper import *
  2.  
    from student import student
  3.  
    class Operate_stu:
  4.  
    '''
  5.  
    操作学生表
  6.  
    '''
  7.  
    def __init__(self,SQLINFO):
  8.  
    self.SQLINFO=SQLINFO
  9.  
     
  10.  
    def Insert(self,stu):
  11.  
    s=[]
  12.  
    SqlBuilder=[]
  13.  
    SqlBuilder.append('insert into student')
  14.  
    SqlBuilder.append("values(%s,'%s',%s)" %(stu.ID,stu.Name,stu.age))
  15.  
    cmd=GetStringForList(SqlBuilder)
  16.  
    result=MySqlHelper(self.SQLINFO).ExecuteNoQuery(cmd)
  17.  
    if result==():
  18.  
    return s
  19.  
    return result
  20.  
     
  21.  
    def GetAll(self):
  22.  
    s=[]
  23.  
    cmd='select * from student'
  24.  
    result=MySqlHelper(self.SQLINFO).ExecuteQuery(cmd)
  25.  
    if result==():
  26.  
    return s
  27.  
    return result
  28.  
     
  29.  
    def GetAllinfoById(self,ID):
  30.  
    stu=student()
  31.  
    SqlBuilder=[]
  32.  
    SqlBuilder.append('select ID,Name,age')
  33.  
    SqlBuilder.append('from student where ID=%s' %ID)
  34.  
    cmd=GetStringForList(SqlBuilder)
  35.  
    result=MySqlHelper(self.SQLINFO).ExecuteQuery(cmd)
  36.  
    if result==():
  37.  
    return stu
  38.  
    result=result[0]
  39.  
    stu.ID=ID
  40.  
    stu.Name=result[1]
  41.  
    stu.age=result[2]
  42.  
    return stu

 

最后:

数据库和表都是运行时创建的,然后插了两条数据,最后查询数据

 

    1.  
      from Helper.MySqlHelper import *
    2.  
      from Operate import *
    3.  
      if __name__ == '__main__':
    4.  
      SQLINFO={'host':'localhost','user':'root','password':'111111','port':3306,'db':'','charset':'utf8'}
    5.  
      dbname='test'
    6.  
      MySqlHelper(SQLINFO).CreateDB(dbname) #创建数据库
    7.  
      SQLINFO['db']=dbname
    8.  
      MySqlHelper(SQLINFO).ExecuteNoQuery('create table Student(ID int primary key,Name varchar(20),age int)') #创建表
    9.  
      #插入数据
    10.  
      stu=student(1,'test',21)
    11.  
      Operate_stu(SQLINFO).Insert(stu)
    12.  
      stu.ID=2
    13.  
      stu.Name='Jo'
    14.  
      stu.age=20
    15.  
      Operate_stu(SQLINFO).Insert(stu)
    16.  
      result=Operate_stu(SQLINFO).GetAll()
    17.  
      for r in result:
    18.  
      print 'ID:%s,Name:%s,age:%s' %(r[0],r[1],r[2])
    19.  
      stu=Operate_stu(SQLINFO).GetAllinfoById(2)
    20.  
      print 'ID:%s,Name:%s,age:%s' %(stu.ID,stu.Name,stu.age)