摘要:一普通連接方法使用模塊普通方式連接。返回結果表示影響的行數。查詢時不需要操作,插入更新刪除時需要提交。模塊點此下載類繼承自,表示一個新的連接池。如果需要新的連接池,按照如下格式新增即可。一個連接池可同時提供多個實例對象。
一、普通 MySQL 連接方法
??使用模塊 MySQLdb 普通方式連接。
#!/usr/bin/env python # _*_ coding:utf-8 _*_ import MySQLdb conn = 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() 提交。
#!/usr/bin/env python # _*_ coding:utf-8 _*_ import MySQLdb from DBUtils.PooledDB import PooledDB pool = 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 , 當連接數達到這個數,新請求的連接會分享已經分配出去的連接
??以連接池的方式,編寫模塊 mysqlhelper.py,可以在項目的其他地方導入MySQL連接實例即可使用。 模塊點此下載 mysqlhelper.py
#!/usr/bin/env python # _*_ coding:utf-8 _*_ from __future__ import print_function from DBUtils.PooledDB import PooledDB import MySQLdb import 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): pass def 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 " m 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 " m2 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, m2 import time def test(): print " m 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 " m2 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 if __name__ == "__main__": test()
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44588.html
摘要:的安裝博客補充知識年最新安裝教程,滾雪球學第四季。操作操作數據庫一般被程序員成為操作增刪改查,其中各個字符分別代表新增,讀取,更新,刪除??梢苑祷厥苡绊懶袛?,可以直接通過該值判斷是否修改成功。 ...
摘要:說多了都是淚,我之前排查內存泄漏的問題,超高并發的程序跑了個月后就崩潰。以前寫中間件的時候,就總是把用戶當,要盡量考慮各種情況避免內存泄漏。 從 Java 到 Python 本文為我和同事的共同研究成果 當跨語言的時候,有些東西在一門語言中很常見,但到了另一門語言中可能會很少見。 例如 C# 中,經常會關注拆箱裝箱,但到了 Java 中卻發現,根本沒人關注這個。 后來才知道,原來是因為...
摘要:本次分享將介紹如何在中使用庫實現數據庫的讀寫。提供了工具包及對象關系映射工具,使用許可證發行。模塊實現了與不同數據庫的連接,而模塊則使得能夠操作數據庫。 ??本次分享將介紹如何在Python中使用Pandas庫實現MySQL數據庫的讀寫。首先我們需要了解點ORM方面的知識。 ORM技術 ??對象關系映射技術,即ORM(Object-Relational Mapping)技術,指的是把關...
閱讀 2296·2021-10-09 09:41
閱讀 1750·2019-08-30 15:53
閱讀 992·2019-08-30 15:52
閱讀 3448·2019-08-30 11:26
閱讀 773·2019-08-29 16:09
閱讀 3428·2019-08-29 13:25
閱讀 2264·2019-08-26 16:45
閱讀 1937·2019-08-26 11:51