Python中怎樣操作MySQL數(shù)據(jù)庫,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
創(chuàng)新互聯(lián)公司是一家企業(yè)級云計算解決方案提供商,超15年IDC數(shù)據(jù)中心運營經(jīng)驗。主營GPU顯卡服務(wù)器,站群服務(wù)器,服務(wù)器托管雅安,海外高防服務(wù)器,服務(wù)器機柜,動態(tài)撥號VPS,海外云手機,海外云服務(wù)器,海外服務(wù)器租用托管等。
1. MySQL Connector
import mysql.connector config={ "host":"localhost","port":"3306", "user":"root","password":"password", "database":"demo" } con=mysql.connector.connect(**config)
import mysql.connector config={ "host":"localhost","port":"3306", "user":"root","password":"password", "database":"demo" } con=mysql.connector.connect(**config)
import mysql.connector con=mysql.connector.connect( host="localhost",port="3306", user="root",password="password", database="demo" ) cursor=con.cursor() sql="SELECT empno,job,sal FROM t_bonus;" cursor.execute(sql) print(type(cursor)) for i in cursor: print(i) con.close() Result: <class 'mysql.connector.cursor_cext.CMySQLCursor'> (7369, 'CLERK', Decimal('8000.00')) (7499, 'SALESMAN', Decimal('1600.00')) (7521, 'SALESMAN', Decimal('1250.00')) (7566, 'MANAGER', Decimal('2975.00')) (7654, 'SALESMAN', Decimal('1250.00')) (7698, 'MANAGER', Decimal('2850.00')) (7782, 'MANAGER', Decimal('2450.00')) (7788, 'ANALYST', Decimal('3000.00')) (7839, 'PRESIDENT', Decimal('5000.00')) (7844, 'SALESMAN', Decimal('1500.00')) (7900, 'CLERK', Decimal('950.00')) (7902, 'ANALYST', Decimal('3000.00')) (7934, 'CLERK', Decimal('1300.00'))
username=1 OR 1=1 password=1 OR 1=1
在使用字符串直接拼接時OR之前不管對錯,與OR結(jié)合都為true
解決方法——預(yù)編譯(也可以提高速度)
username="1 OR 1=1" password="1 OR 1=1" sql="SELECT COUNT(*) FROM t_user WHERE username=%s AND AES_DECRYPT(UNHEX(password),'helloWorld')=%s" cursor.execute(sql,(username,password)) print(cursor.fetchone()[0])
sql連接和使用異常處理異常
import mysql.connector try: con=mysql.connector.connect( host="localhost",port="3306", user="root",password="password", database="demo" ) con.start_transaction() cursor=con.cursor() sql="INSERT INTO t_dept(deptno,dname,loc) VALUES(%s,%s,%s);" cursor.execute(sql,(60,"SALES","HUBAI")) con.commit() except Exception as e: if "con" in dir(): con.rollback() print(e) finally: if "con" in dir(): con.close()
import mysql.connector,mysql.connector.pooling config={ "host": "localhost", "port": "3306", "user": "root", "password": "password", "database": "demo" } try: pool=mysql.connector.pooling.MySQLConnectionPool(**config,pool_size=5) con=pool.get_connection() con.start_transaction() cursor = con.cursor() sql = "DELETE FROM t_dept WHERE deptno=%s" cursor.execute(sql, (70,)) con.commit() except Exception as e: if "con" in dir(): con.rollback() print(e) # do not need to close con
executemany() 反復(fù)執(zhí)行一條SQL語句
import mysql.connector,mysql.connector.pooling config={ "host": "localhost", "port": "3306", "user": "root", "password": "password", "database": "demo" } try: pool=mysql.connector.pooling.MySQLConnectionPool(**config,pool_size=5) con=pool.get_connection() con.start_transaction() cursor = con.cursor() sql = "INSERT INTO t_dept(deptno,dname,loc) VALUES(%s,%s,%s);" date=[[70,"SALES","BEIJING"],[80,"ACTOR","SHANGHAI"]] cursor.executemany(sql, date) con.commit() except Exception as e: if "con" in dir(): con.rollback() print(e) # do not need to close con
數(shù)據(jù)庫的連接是昂貴的,一個連接要經(jīng)過TCP三次握手,四次揮手,而且一臺計算機的最大線程數(shù)也是有限的
數(shù)據(jù)庫連接池技術(shù)就是先創(chuàng)建好連接,再直接拿出來使用
import mysql.connector,mysql.connector.pooling config={ "host": "localhost", "port": "3306", "user": "root", "password": "password", "database": "demo" } try: pool=mysql.connector.pooling.MySQLConnectionPool(**config,pool_size=5) con=pool.get_connection() con.start_transaction() cursor = con.cursor() sql = "INSERT INTO t_dept(deptno,dname,loc) VALUES(%s,%s,%s);" cursor.execute(sql, (70, "SALES", "HUBAI")) con.commit() except Exception as e: if "con" in dir(): con.rollback() print(e) # do not need to close con
看完上述內(nèi)容,你們掌握Python中怎樣操作MySQL數(shù)據(jù)庫的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
名稱欄目:Python中怎樣操作MySQL數(shù)據(jù)庫
本文鏈接:http://m.rwnh.cn/article48/jijhep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、虛擬主機、商城網(wǎng)站、App設(shè)計、做網(wǎng)站、微信公眾號
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)