欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

MySQL——python交互

系統 2045 0

與python交互之前我們需要安裝一個MySQL的驅動模塊Connector,這個驅動模塊直接在cmd命令行輸入

            pip 
            
              install
            
             mysql.connector
          

安裝是否成功可以接著輸入

            
              python
# 輸入之后,會進入python解釋器(前提是python已經配置好了環境變量
# 導入安裝的模塊,沒有報錯即安裝成功
import mysql.connector
            
          

進入自己的編輯器(pycharm)首先連接數據庫方式:

  數據庫連接

      1、當前模塊直接連接

            
              import
            
            
               mysql.connector


            
            
              #
            
            
               連接數據庫
            
            
con =
            
               mysql.connector.connect(
    host
            
            =
            
              "
            
            
              127.0.0.1
            
            
              "
            
            
              ,
    port
            
            =3306
            
              ,
    user
            
            =
            
              "
            
            
              root
            
            
              "
            
            ,        
            
              #
            
            
               可以填寫其他用戶,用戶的變量名是user
            
            
    password=
            
              "
            
            
              XXXXXX
            
            
              "
            
            ,       
            
              #
            
            
               這里填寫上面用戶對應的密碼
            
            
    database=
            
              "
            
            
              dbname
            
            
              "
            
            
              #
            
            
               需要連接的數據庫的名字
            
            
              )
......
......
......

            
            
              #
            
            
               使用完數據庫之后,需要關閉數據庫,不要浪費資源
            
            
con.close()
          

      2、導入配置文件進行連接

            
              #
            
            
               先創建一個配置文件 config.py
            
            
              import
            
            
                mysql.connector

            
            
              #
            
            
               下面是字典類型
            
            
config =
            
               {
    
            
            
              "
            
            
              host
            
            
              "
            
            : 
            
              "
            
            
              127.0.0.1
            
            
              "
            
            
              ,
    
            
            
              "
            
            
              port
            
            
              "
            
            : 3306
            
              ,
    
            
            
              "
            
            
              user
            
            
              "
            
            : 
            
              "
            
            
              root
            
            
              "
            
            
              ,
    
            
            
              "
            
            
              password
            
            
              "
            
            : 
            
              "
            
            
              XXXXXX
            
            
              "
            
            
              ,
    
            
            
              "
            
            
              database
            
            
              "
            
            : 
            
              "
            
            
              dbname
            
            
              "
            
            
              
}


            
            
              #
            
            
              再創建一個文件connect.py
            
            
              import
            
            
                mysql.connector

            
            
              from
            
             config 
            
              import
            
            
               config

            
            
              #
            
            
               使用配置文件連接
            
            
con = mysql.connector.connect(**
            
              config)


            
            
              #
            
            
               關閉連接
            
            
con.close()
          

  游標

      游標的作用是執行sql語句,或者保存sqi結果集。常用的方法:

        cursor()創建游標(使用連接)
        execute()執行sql語句;可以接受兩個參數,形如下面涉及的預編譯

        executemany()循環執行相同的sql語句第二個參數必須是一個列表

        fetchall()/fetchone()獲取全部數據/一條數據

            
              #
            
            
               創建一個游標
            
            
cursor =
            
               con.cursor()


            
            
              #
            
            
               假設有兩個sql語句一個是查詢,一個是執行insert語句
            
            
              cursor.execute(sql_select)

            
            
              #
            
            
               這個結果集是保存在cursor中,你可以通過fetechall()獲取全部數據或者fetchone()查詢第一條數據
            
            
data =
            
               cursor.fetchall()

            
            
              #
            
            
               得到的數據我們可以進行業務的處理
            
            
              #
            
            
               執行創建語句,不會結果集
            
            
sql = 
            
              "
            
            
              insert into s_region values(%s, %s)
            
            
              "
            
            
              
data 
            
            = [[1,
            
              "
            
            
              sd
            
            
              "
            
            ],[2,
            
              "
            
            
              dfd
            
            
              "
            
            ]]  
            
              #
            
            
               或者里面是元組的形式data = [(1,"sd"),(2,"dfd")]
            
            
cursor.execute(sql, data)
          

?

  防止SQL注入攻擊方式

    為什么存在SQL注入攻擊?輸入一個不與數據表格的數據匹配也是可以繼續執行的。比如用戶輸入特定的錯誤字符串格式數據,還是可以通過驗證登錄進去

            
              import
            
            
               mysql.connector


            
            
              #
            
            
               連接數據庫
            
            
              
#
            
            
               1、本模塊創建連接并保存在變量中
            
            
con =
            
               mysql.connector.connect(
    host
            
            =
            
              "
            
            
              127.0.0.1
            
            
              "
            
            
              ,
    port
            
            =3306
            
              ,
    user
            
            =
            
              "
            
            
              root
            
            
              "
            
            
              ,
    password
            
            =
            
              "
            
            
              123456
            
            
              "
            
            
              ,
    database
            
            =
            
              "
            
            
              briup2
            
            
              "
            
            
              
)

            
            
              #
            
            
               2、創建數據庫游標
            
            
cursor =
            
               con.cursor()

            
            
              #
            
            
               模擬登錄:賬戶:last_name,密碼:first_name
            
            
username = 
            
              "
            
            
              1 or 1=1
            
            
              "
            
            
              
password 
            
            = 
            
              "
            
            
              1 or 1=1
            
            
              "
            
            
              #
            
            
               3、定義一個sql語句
            
            
sql = 
            
              "
            
            
              select count(*) from user_table where user_id=%s and user_psd=%s
            
            
              "
            
            %
            
              (username, password)

            
            
              #
            
            
               4、執行sql語句
            
            
              ursor.execute(sql )

            
            
              #
            
            
               5、獲取全部結果集
            
            
data =
            
               cursor.fetchall()

            
            
              print
            
            (data)      
            
              #
            
            
               總之結果不為0
            
          

      上述結果不為0表示后臺可以查到某個結果集,即用戶是可以登錄進入(主頁);如果可以注入攻擊就可以刪掉某個數據表的所有數據,這樣做是很危險的,所以需要后臺處理得到的數據

            id = 
            
              "
            
            
              1 or 1=1
            
            
              "
            
            
              
sql 
            
            = 
            
              "
            
            
              delete from tbname where id=%s
            
            
              "
            
             % (id)
            
              #
            
            
               將訂單表數據全部刪除了--欲哭無淚
            
            
delete 
            
              from
            
             tbname where id=1 
            
              or
            
             1=1
          

      防止SQL注入攻擊的三種方式:

        1、通過單引號將獲取的值轉換為字符串:format格式

            
              #
            
            
               將上面的sql語句改成下面這一語句,注意大括號兩邊都有引號
            
            
sql = 
            
              "
            
            
              select count(*) from user_table where user_id=’{}‘ and user_psd='{}'
            
            
              "
            
            .format(username, password)
          

        2、通過單引號將獲取的值轉換為字符串:字符串格式

            
              #
            
            
               將上面的sql語句改成下面這一語句,注意%s兩邊都有引號
            
            
sql = 
            
              "
            
            
              select count(*) from user_table where user_id=’%s‘ and user_psd='%s'
            
            
              "
            
            %(username, password)
          

        3、通過預編譯的方式防止SQL注入攻擊(推薦使用)

            
              #
            
            
               將上面的sql語句改成下面這一語句,注意%s兩邊都沒有引號
            
            
sql = 
            
              "
            
            
              select count(*) from user_table where user_id=%s and user_psd=%s
            
            
              "
            
            
              #
            
            
               再將執行語句改成下面這條
            
            
cursor.execute(sql, (username, password))
          

  事務控制

    事務的產生是因為對數據表操作之后,數據庫不會發生改變,若想發生改變,就需要事務三操作

    事務控制一般有三步操作:

      1、開啟事務:通過連接開啟事務,調用start_transaction()

      2、提交事務:也是通過連接提交事務,一般都是適用于對數據表的增加、刪除、修改等操作,調用commit()

      3、回滾事務:一般是發生異常之后才會執行的回滾,調用rollback()

    這三步都應該在異常中執行

              
                import
              
              
                 mysql.connector


              
              
                #
              
              
                 連接數據庫
              
              
                try
              
              
                :
    
              
              
                """
              
              
                
    數據庫的連接,數據表的增加、刪除、修改操作
    都是需要在異常中處理
    
              
              
                """
              
              
                #
              
              
                 1、本模塊創建連接并保存在變量中
              
              
    con =
              
                 mysql.connector.connect(
        host
              
              =
              
                "
              
              
                127.0.0.1
              
              
                "
              
              
                ,
        port
              
              =3306
              
                ,
        user
              
              =
              
                "
              
              
                root
              
              
                "
              
              
                ,
        password
              
              =
              
                "
              
              
                123456
              
              
                "
              
              
                ,
        database
              
              =
              
                "
              
              
                briup2
              
              
                "
              
              
                
    )
    
              
              
                #
              
              
                 2、創建數據庫游標
              
              
    cursor =
              
                 con.cursor()

    
              
              
                #
              
              
                 3、開啟事務
              
              
                    con.start_transaction()

    
              
              
                #
              
              
                 4、執行一條update語句
              
              
    sql = 
              
                "
              
              
                update user_table set username='aaa'
              
              
                "
              
              
                #
              
              
                 5、執行sql語句
              
              
                    cursor.execute(sql)

    
              
              
                #
              
              
                 6、提交事務
              
              
                    con.commit()

              
              
                except
              
              
                :
    
              
              
                """
              
              
                
    在發生異常之前,還需判斷連接是否成功
    發生異常之后一般都是需要回滾,以免數據發生錯誤
    
              
              
                """
              
              
                if
              
              
                "
              
              
                con
              
              
                "
              
              
                in
              
              
                 dir():
        con.rollback()

              
              
                finally
              
              
                :
    
              
              
                """
              
              
                
    無論異常與否,都要執行finally語句
    
              
              
                """
              
              
                
    con.close()
              
            
View Code

  數據庫連接池(緩存)

    上述代碼的開頭都會寫創建數據庫的連接和最后也會寫數據庫的關閉,如果程序反復創建和關閉,是會浪費大量的資源。而數據庫連接池是在程序運行之前就已經緩存好了,那么就可以直接獲取連接就行,而且不使用數據庫也不用關閉,緩存機制會自動回收

              
                #
              
              
                 先創建一個配置文件 config.py
              
              
config =
              
                 {
    
              
              
                "
              
              
                host
              
              
                "
              
              : 
              
                "
              
              
                127.0.0.1
              
              
                "
              
              
                ,
    
              
              
                "
              
              
                port
              
              
                "
              
              : 3306
              
                ,
    
              
              
                "
              
              
                user
              
              
                "
              
              : 
              
                "
              
              
                root
              
              
                "
              
              
                ,
    
              
              
                "
              
              
                password
              
              
                "
              
              : 
              
                "
              
              
                123456
              
              
                "
              
              
                ,
    
              
              
                "
              
              
                database
              
              
                "
              
              : 
              
                "
              
              
                briup2
              
              
                "
              
              
                
}


              
              
                #
              
              
                 在創建一個測試文件 exam.py
              
              
                import
              
              
                 mysql.connector.pooling

              
              
                from
              
               config 
              
                import
              
              
                 config
pool 
              
              =
              
                 mysql.connector.pooling.MySQLConnectionPool(
    
              
              **
              
                config,
    pool_size
              
              =10
              
                
)


              
              
                try
              
              
                :
    
              
              
                #
              
              
                 2、先獲取一個連接
              
              
    con =
              
                 pool.get_connection()
    
              
              
                #
              
              
                 3、開啟事務
              
              
                    con.start_transaction()
    
              
              
                #
              
              
                 4、創建一個游標
              
              
    cursor =
              
                 con.cursor()
    
              
              
                #
              
              
                 5、定義sql語句
              
              
    sql_create = 
              
                "
              
              
                create table s_emp_new like s_emp;
              
              
                "
              
              
                
    sql_insert 
              
              = 
              
                """
              
              
                
        insert into s_emp_new 
        select * 
        from s_emp
        where dept_id in (      
            select dept_id
            from s_emp
            group by dept_id
                having avg(salary)>(    
                    select avg(salary)
                    from s_emp
                )
        )
              
              
                """
              
              
                
    sql_update 
              
              = 
              
                "
              
              
                update s_emp_new set dept_id = 44
              
              
                "
              
              
                #
              
              
                 6、執行sql語句
              
              
                    cursor.execute(sql_create)
    cursor.execute(sql_insert)
    cursor.execute(sql_update)
    
              
              
                #
              
              
                 7、提交事務
              
              
                    con.commit()

    tip 
              
              = 
              
                "
              
              
                執行成功!
              
              
                "
              
              
                except
              
              
                 Exception as e:
    
              
              
                if
              
              
                "
              
              
                con
              
              
                "
              
              
                in
              
              
                 dir():
        
              
              
                #
              
              
                 8、回滾事務
              
              
                        con.rollback()
        tip 
              
              = 
              
                "
              
              
                執行失敗!
              
              
                "
              
              
                print
              
              
                (e)

              
              
                finally
              
              
                :
    
              
              
                print
              
              (tip)
            
View Code

?

?


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久草在线精品视频99 | 色婷综合 | 狠狠色噜噜狠狠狠狠97影音先锋 | 国产精品2区 | 色综合色综合网色综合 | 性香港xxxxx免费视频播放 | 亚洲天堂久久精品成人 | 中文字幕a∨在线乱码免费看 | 欧美日韩视频一区三区二区 | 性开放的欧美大片按摩 | 国产精品美女久久久免费 | 漂流教室在线观看 | 日本无码成人片在线观看波多 | 三人弄娇妻高潮3p视频 | 免费在线黄色电影 | 性夜影院爽黄e爽在线观看 苏晓晖个人简介军衔 | www.国产 | 91成人精品 | 亚洲国产综合网 | 日本一级毛片视频 | 污的视频在线观看 | 日韩精品久久一区二区三区 | 男女污网站 | 免费观看毛片 | 国产一级特黄aa大片爽爽 | 精品国产视频 | 久久久久国产一区二区三区 | 狠狠草视频| 国产婷婷色一区二区三区在线 | 免费看国产片 | 国产精品美女久久久久久久久久久 | 欧美激情 在线 | 逼逼网 | 激情做a全过程片A | 精品一区二区三区免费看 | 成熟自由日本语热亚洲人 | 国产永久免费 | 天天插天天操天天干 | 中文在线观看免费视频 | 好看的91视频 | 精品国产自在久久 |