<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## 一、引言   Python操作MySQL一共有兩種方式,第一種是用原生模塊pymysql和mysqldb,這兩種模塊在py2中都支持,但是在py3中只支持pymysql,但是pymysql可以通過pymysql.install\_as\_MySQLdb()的方式構造成和mysqldb一樣的使用;第二種方式是ORM框架 SQLAchemy。 ## 二、pymysql ### 下載安裝 ~~~ pip install pymysql ~~~ ### 增、刪、改 ~~~ import pymysql # 增,刪,改除了sql語句不同,使用的方式一致 conn = pymysql.connect(host="localhost",user='root',password='',database="db2") #連接mysql cursor = conn.cursor() #創建游標 sql = "insert into userinfo(username,password) values(%s,%s)" #sql語句 ~~~ ~~~ #r表示執行這條語句受影響的行數 r = cursor.execute(sql ,['wusir','123']) #r = cursor.executemany(sql ,[('jack','213'),('tom','234')]) #表示插入多條數據,只有在插入數據的時候才使用executemany ~~~ ~~~ conn.commit() #增刪改執行一定要加conn.commit() cursor.close() #關閉游標 conn.close()  #關閉連接 ~~~ ### 查 ~~~ # 查 conn = pymysql.connect(host="localhost",user='root',password='',database="db2") # cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) #使用這種游標查出來的數據是列表套子典 cursor = conn.cursor() #使用這種游標查出來的數據是元祖套元祖 sql = "select * from userinfo" cursor.execute(sql) #cursor.scroll(1,mode='relative') # 讓游標相對當前位置移動 #cursor.scroll(2,mode='absolute') # 讓游標相對絕對位置移動 #result = cursor.fetchone() # 取一個數據 #print(result) #result = cursor.fetchmany(4) #取指定數目的數據 #print(result) result = cursor.fetchall() #取查出來的所有數據 print(result) cursor.close() conn.close() #PS:每取一個數據游標就會向下移動一位 # 新插入數據的自增ID: cursor.lastrowid # 如當有一個主從表時,從表要根據主表的id變化來插入數據,這時可以使用cursor.lastrowid來獲取最新插入的主表id。 ~~~ ### 避免mysql注入   寫一個很簡單的基于mysql的登錄程序,數據庫里面只有一個user為alex,pwd為123,當使用第一種寫法時會出現mysql注入的情況。 ~~~ import pymysql user = input('>>請輸入用戶名:') pwd = input('>>請輸入密碼:') conn = pymysql.connect(host='127.0.0.1',user='root',password='',database='db2') cursor = conn.cursor() #第一種寫法(不可以) sql = "select * from userinfo where name='%s' and pwd='%s'"%(user,pwd) cursor.execute(sql) res = cursor.fetchone() print(res) #第二種寫法(可以) sql = "select * from userinfo where name=%s and pwd=%s" cursor.execute(sql,[user,pwd]) res = cursor.fetchone() print(res) ~~~ ~~~ #第三種寫法(可以) sql = "select * from userinfo where name=%(u)s and pwd=%(p)s" cursor.execute(sql,{'u':user,'p':pwd}) res = cursor.fetchone() print(res) ~~~ ~~~ if res:   print('登陸成功') else:   print('登陸失敗') ~~~ ![](https://img.kancloud.cn/55/58/5558a965e2ebe20259838bc88e649dea_721x181.png)   這就是mysql注入,因為mysql中的注釋是--,使用這種字符串拼接會將后面的語句注釋掉,同時1=1成立,這樣就會出現即使沒有這個用戶也會登錄成功。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看