Python 连接 MySQL,,本文转至 余子越的博
Python 连接 MySQL,,本文转至 余子越的博
本文转至 余子越的博客 ,文章 Python 连接 MySQL,欢迎访问yuchaoshui.com 了解更多信息!
一、普通 MySQL 连接方法
??使用模块 MySQLdb 普通方式连接。
#!/usr/bin/env python# _*_ coding:utf-8 _*_import MySQLdbconn = MySQLdb.connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, passwd=‘123‘, db=‘test‘)cursor = conn.cursor()sql_1 = "select * from user where id = %s;" % (5,)sql_2 = "select * from user where id = %s;" % (5,)sql_3 = """ insert into user(username, password) values("yuchaoshui", "123"); """try: print cursor.execute(sql_1) print cursor.fetchall() print cursor.execute(sql_2) print cursor.fetchall() print cursor.execute(sql_3) conn.commit()except Exception as e: print(e) conn.rollback()cursor.close()conn.close()
?? execute() 返回结果表示影响的行数。cursor.fetchone() 取回一条结果。sql_1 直接一行写完,sql_2 换行写完, sql_3 多行写。 查询时不需要 commit() 操作,插入、更新、删除时需要 commit() 提交。
二、使用连接池连接MySQL
#!/usr/bin/env python# _*_ coding:utf-8 _*_import MySQLdbfrom DBUtils.PooledDB import PooledDBpool = PooledDB(MySQLdb, 5, host=‘127.0.0.1‘, port=3306, user=‘root‘, passwd=‘123‘, db=‘test‘)conn = pool.connection()cursor = conn.cursor()sql_1 = "select * from user where id = %s;" % (5,)sql_2 = "select * from user where id = %s;" % (5,)sql_3 = """ insert into user(username, password) values("yuchaoshui", "123"); """try: print cursor.execute(sql_1) print cursor.fetchall() print cursor.execute(sql_2) print cursor.fetchall() print cursor.execute(sql_3) conn.commit()except Exception as e: print(e) conn.rollback()cursor.close()conn.close()
?? 5 为连接池里的最少连接数, 以后每次需要数据库连接就是用connection()函数获取连接就好了
PooledDB 的默认值
PooledDB(self, creator, mincached=0, maxcached=0, maxshared=0, maxconnections=0, blocking=False, maxusage=None, setsession=None, reset=True, failures=None, ping=1, *args, **kwargs)PooledDB的参数:mincached,最少的空闲连接数,如果空闲连接数小于这个数,pool会创建一个新的连接maxcached,最大的空闲连接数,如果空闲连接数大于这个数,pool会关闭空闲连接maxconnections,最大的连接数,blocking,当连接数达到最大的连接数时,在请求连接的时候,如果这个值是True,请求连接的程序会一直等待,直到当前连接数小于最大连接数,如果这个值是False,会报错,maxshared , 当连接数达到这个数,新请求的连接会分享已经分配出去的连接
三、模块导入连接 MySQL
??以连接池的方式,编写模块 mysqlhelper.py,可以在项目的其他地方导入MySQL连接实例即可使用。 模块点此下载 mysqlhelper.py
#!/usr/bin/env python# _*_ coding:utf-8 _*_from __future__ import print_functionfrom DBUtils.PooledDB import PooledDBimport MySQLdbimport sys__all__ = [‘m‘] + ["m"+str(i) for i in range(2, 11)]class MH(object): def __init__(self): try: print("Connecting MySQL Server {0}@{1}:{2} ..".format( self.__class__.db, self.__class__.host, self.__class__.port), end=‘.‘) self.conn = self.__class__.pool.connection() self.cursor = self.conn.cursor() print(‘ ok!‘) except Exception, e: print("pool.connection error: {0}".format(e)) def select(self, query=‘‘): try: self.effect = self.cursor.execute(query) return self.cursor except Exception as e: print("select error: {0}".format(e)) def update(self, query=‘‘): try: self.effect = self.cursor.execute(query) self.conn.commit() except Exception as e: print("update error: {0}".format(e)) self.conn.rollback() self.effect = 0# M2 类继承自 M1,表示一个新的 MySQL 连接池。# 如果需要新的连接池 ,按照如下格式新增即可。class MH2(MH): passdef init_pool(M, host=‘127.0.0.1‘, port=3306, user=‘root‘, password=‘‘, database=‘test‘, pool_size=5): M.host = host M.port = int(port) M.user = user M.password = password M.db = database M.pool_size = pool_size try: M.pool = PooledDB(MySQLdb, M.pool_size, host=M.host, port=M.port, user=M.user, passwd=M.password, db=M.db) except Exception, e: print("PooledDB init error: {0}".format(e)) exit(1)# 初始化连接池,可以有多个。第一个参数是前面手动定义的连接池类。init_pool(MH, ‘127.0.0.1‘, 3306, ‘root‘, ‘123‘, ‘test‘)init_pool(MH2, ‘12.55.5.61‘, 3306, ‘root‘, ‘123‘, ‘test‘)# 定义将要被导出的MySQL实例。 一个连接池可同时提供多个实例对象。m = MH()m2 = MH2()if __name__ == "__main__": pass #print "\nm info:" #print m.select("select * from user;").fetchone() #print m.effect #print m.select("select * from user;").fetchall() #print m.effect #m.update("insert into user(username,password) values(‘haha‘, ‘heihei‘);") #print m.effect ################################################## #print "\nm2 info:" #print m2.select("select * from user;").fetchone() #print m2.effect #print m2.select("select * from user;").fetchall() #print m2.effect #m2.update("insert into user(username,password) values(‘haha‘, ‘heihei‘);") #print m2.effect
#!/usr/bin/env python# _*_ coding:utf-8 _*_from mysqlhelper import m, m2import timedef test(): print "\nm info:" print m.select("select * from user;").fetchone() print m.effect print m.select("select * from user;").fetchall() print m.effect m.update("insert into user(username,password) values(‘haha‘, ‘heihei‘);") print m.effect ################################################# print "\nm2 info:" print m2.select("select * from user;").fetchone() print m2.effect print m2.select("select * from user;").fetchall() print m2.effect m2.update("insert into user(username,password) values(‘haha‘, ‘heihei‘);") print m2.effectif __name__ == ‘__main__‘: test()
本文转至 余子越的博客 ,文章 Python 连接 MySQL,欢迎访问yuchaoshui.com 了解更多信息!
Python 连接 MySQL
评论关闭