国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python 連接 MySQL

williamwen1986 / 1658人閱讀

摘要:一普通連接方法使用模塊普通方式連接。返回結果表示影響的行數。查詢時不需要操作,插入更新刪除時需要提交。模塊點此下載類繼承自,表示一個新的連接池。如果需要新的連接池,按照如下格式新增即可。一個連接池可同時提供多個實例對象。

一、普通 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() 提交。

二、使用連接池連接MySQL
#!/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 , 當連接數達到這個數,新請求的連接會分享已經分配出去的連接


三、模塊導入連接 MySQL

??以連接池的方式,編寫模塊 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

相關文章

  • python 數據庫編程,這篇是針對 mysql 的,滾雪球學Python第4季第13篇

    摘要:的安裝博客補充知識年最新安裝教程,滾雪球學第四季。操作操作數據庫一般被程序員成為操作增刪改查,其中各個字符分別代表新增,讀取,更新,刪除??梢苑祷厥苡绊懶袛?,可以直接通過該值判斷是否修改成功。 ...

    xiaowugui666 評論0 收藏0
  • Python 中的 MySQL 數據庫連接

    摘要:說多了都是淚,我之前排查內存泄漏的問題,超高并發的程序跑了個月后就崩潰。以前寫中間件的時候,就總是把用戶當,要盡量考慮各種情況避免內存泄漏。 從 Java 到 Python 本文為我和同事的共同研究成果 當跨語言的時候,有些東西在一門語言中很常見,但到了另一門語言中可能會很少見。 例如 C# 中,經常會關注拆箱裝箱,但到了 Java 中卻發現,根本沒人關注這個。 后來才知道,原來是因為...

    Paul_King 評論0 收藏0
  • Python之使用Pandas庫實現MySQL數據庫的讀寫

    摘要:本次分享將介紹如何在中使用庫實現數據庫的讀寫。提供了工具包及對象關系映射工具,使用許可證發行。模塊實現了與不同數據庫的連接,而模塊則使得能夠操作數據庫。 ??本次分享將介紹如何在Python中使用Pandas庫實現MySQL數據庫的讀寫。首先我們需要了解點ORM方面的知識。 ORM技術 ??對象關系映射技術,即ORM(Object-Relational Mapping)技術,指的是把關...

    darcrand 評論0 收藏0

發表評論

0條評論

williamwen1986

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<