您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關怎么在Python中操作MySQL數據庫,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
1、云計算,典型應用OpenStack。2、WEB前端開發,眾多大型網站均為Python開發。3.人工智能應用,基于大數據分析和深度學習而發展出來的人工智能本質上已經無法離開python。4、系統運維工程項目,自動化運維的標配就是python+Django/flask。5、金融理財分析,量化交易,金融分析。6、大數據分析。
pip install PyMySQL
python連接test
數據庫
import pymysql host = 'localhost' # 主機地址 username = 'root' # 數據庫用戶名 password = '' # 數據庫密碼 db_name = 'test' # 數據庫名稱 # 創建connect對象 connect = pymysql.connect(host=host, user=username, password=password, database=db_name) # 獲取游標對象 cursor = connect.cursor() # 查詢數據庫版本 cursor.execute('SELECT VERSION()') # 從查詢結果集中獲取下一行數據,返回值為一個值的序列 result = cursor.fetchone() # 打印結果 print(result) # 關閉游標 cursor.close() # 關閉數據庫連接 connect.close()
執行結果:
('10.4.17-MariaDB',)
創建一個默認編碼格式為utf8的數據表users
id
:int類型,不能為空,有自增屬性,主鍵約束
name
:varchar類型,長度最多為10字符,可以為空
age
:int類型,可以為空
import pprint import pymysql host = 'localhost' # 主機地址 username = 'root' # 數據庫用戶名 password = '' # 數據庫密碼 db_name = 'test' # 數據庫名稱 # 創建connect對象 connect = pymysql.connect(host=host, user=username, password=password, database=db_name) # 獲取游標對象 cursor = connect.cursor() # 創建數據表的SQL命令 create_sql = ''' CREATE TABLE `users`( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(10) NULL, `age` INT NULL, PRIMARY KEY (`id`)) DEFAULT CHARACTER SET = utf8; ''' # 創建數據表 cursor.execute(create_sql) # 查詢我們創建的數據表的結構 cursor.execute('DESC users') # 從查詢結果中獲取結果的所有(或者剩余)行數據,返回值為包含序列的序列(例如元組序列) result = cursor.fetchall() # 打印結果 pprint.pprint(result) # 關閉游標 cursor.close() # 關閉數據庫連接 connect.close()
執行結果:
(('id', 'int(11)', 'NO', 'PRI', None, 'auto_increment'),
('name', 'varchar(10)', 'YES', '', None, ''),
('age', 'int(11)', 'YES', '', None, ''))
插入3行數據:
id:1,name:路飛,age:18
id:2,name:娜美,age:19
id:3,name:索隆,age:20
import pprint import pymysql host = 'localhost' # 主機地址 username = 'root' # 數據庫用戶名 password = '' # 數據庫密碼 db_name = 'test' # 數據庫名稱 # 創建connect對象,插入中文時需要指定編碼格式 connect = pymysql.connect(host=host, user=username, password=password, database=db_name, charset='utf8') # 獲取游標對象查詢返回字典 cursor = connect.cursor(pymysql.cursors.DictCursor) # 插入數據的SQL命令 insert_sql = ''' INSERT INTO users (id, name, age) VALUES (1, '路飛', 18),(2, '娜美', 19),(3, '索隆', 20) ''' try: # 插入數據到數據表 cursor.execute(insert_sql) # 提交任何掛起的事務到數據庫 connect.commit() except Exception as e: # 發送數據回滾,回滾到事務開始時的狀態 connect.rollback() # 查詢數據 cursor.execute('SELECT * FROM users') # 只返回一行數據 # result_one = cursor.fetchone() # print('---fetchone---') # pprint.pprint(result_one) # 返回全部數據 result_all = cursor.fetchall() print('---fetchall---') pprint.pprint(result_all) # 關閉游標 cursor.close() # 關閉數據庫連接 connect.close()
執行結果:
---fetchall---
[{'age': 18, 'id': 1, 'name': '路飛'},
{'age': 19, 'id': 2, 'name': '娜美'},
{'age': 20, 'id': 3, 'name': '索隆'}]
更新數據id:3,name:山治,age:21
import pprint import pymysql host = 'localhost' # 主機地址 username = 'root' # 數據庫用戶名 password = '' # 數據庫密碼 db_name = 'test' # 數據庫名稱 # 創建connect對象,插入中文時需要指定編碼格式 connect = pymysql.connect(host=host, user=username, password=password, database=db_name, charset='utf8') # 獲取游標對象查詢返回字典 cursor = connect.cursor(pymysql.cursors.DictCursor) # 查詢數據 cursor.execute('SELECT * FROM users') # 返回更新前全部數據 result_all = cursor.fetchall() print('---更新前---') pprint.pprint(result_all) # 更新數據的SQL命令 update_sql = ''' UPDATE users SET name = '山治',age = 21 WHERE id = 3 ''' try: # 更新數據到數據表 cursor.execute(update_sql) # 提交任何掛起的事務到數據庫 connect.commit() except Exception as e: # 發送數據回滾,回滾到事務開始時的狀態 connect.rollback() # 查詢數據 cursor.execute('SELECT * FROM users') # 返回更新后全部數據 result_all = cursor.fetchall() print('---更新后---') pprint.pprint(result_all) # 關閉游標 cursor.close() # 關閉數據庫連接 connect.close()
執行結果:
---更新前---
[{'age': 18, 'id': 1, 'name': '路飛'},
{'age': 19, 'id': 2, 'name': '娜美'},
{'age': 20, 'id': 3, 'name': '索隆'}]
---更新后---
[{'age': 18, 'id': 1, 'name': '路飛'},
{'age': 19, 'id': 2, 'name': '娜美'},
{'age': 21, 'id': 3, 'name': '山治'}]
刪除'age': 19, 'id': 2, 'name': '娜美'
該行數據
import pprint import pymysql host = 'localhost' # 主機地址 username = 'root' # 數據庫用戶名 password = '' # 數據庫密碼 db_name = 'test' # 數據庫名稱 # 創建connect對象,插入中文時需要指定編碼格式 connect = pymysql.connect(host=host, user=username, password=password, database=db_name, charset='utf8') # 獲取游標對象查詢返回字典 cursor = connect.cursor(pymysql.cursors.DictCursor) # 查詢數據 cursor.execute('SELECT * FROM users') # 返回刪除前全部數據 result_all = cursor.fetchall() print('---刪除前---') pprint.pprint(result_all) # 刪除數據的SQL命令 update_sql = ''' DELETE FROM users WHERE id = 2 ''' try: # 刪除數據表的數據 cursor.execute(update_sql) # 提交任何掛起的事務到數據庫 connect.commit() except Exception as e: # 發送數據回滾,回滾到事務開始時的狀態 connect.rollback() # 查詢數據 cursor.execute('SELECT * FROM users') # 返回刪除后全部數據 result_all = cursor.fetchall() print('---刪除后---') pprint.pprint(result_all) # 關閉游標 cursor.close() # 關閉數據庫連接 connect.close()
執行結果:
---刪除前---
[{'age': 18, 'id': 1, 'name': '路飛'},
{'age': 19, 'id': 2, 'name': '娜美'},
{'age': 21, 'id': 3, 'name': '山治'}]
---刪除后---
[{'age': 18, 'id': 1, 'name': '路飛'}, {'age': 21, 'id': 3, 'name': '山治'}]
.close()
方法:
馬上關閉數據連接(而不是當__del__
方法被調用的時候)。此后連接變得不可用,再次訪問本連接對象會觸發一個錯誤,使用本連接對象的游標對象,也會導致例外發生。在關閉連接對象之前,沒有提交(commit
)對數據庫的改變將會導致一個隱含的回滾動作(rollback
),這將丟棄之前的數據改變操作。
.commit()
方法:
提交任何掛起的事務到數據庫中。
.rollback()
方法:
對于支持事務的數據庫。調用此方法將導致數據庫回滾到事務開始時的狀態。
.cursor()
方法:
方法返回給定連接上建立的游標對象(Cursor Object),如果數據庫沒有提供對應的游標對象,那么有程序來模擬實現游標功能。
.close()
方法:
立即關閉游標(不論__del__
方法是否已被調用),此后游標對象就變得不可用了。
.execute(operation[,parameters])
方法:
準備和執行數據庫操作。所提供的參數將會被綁定到語句中的變量,變量的定義和數據庫模塊有關。
.executemany(operation,seq_of_parameters)
方法:
準備和執行數據庫操作,然后以序列形式的函數來執行該操作。
.fetchone()
方法:
從查詢結果中獲取下一行數據,返回值為一個值的序列,如果沒有更多數據則返回None。
.fetchmany([size=cursor.arraysize])
方法:
從查詢結果中獲取下一組行數據,返回值為包含序列的序列,如果沒有數據返回時,則返回空序列。每次調用要獲取的行數由參數指定,如果沒有指定行數,則游標的arraysize屬性決定要獲取的行數。
.fetchall()
方法:
從查詢結果中獲取所有(或者剩余)行數據,返回值為包含序列的序列。
.nextset()
方法:
此方法將游標跳到下一個可用的結果集并丟棄當前結果集的所有行,如果沒有更有查詢結果集則返回None,否則返回True,接下來的fetch操作將會從新結果集返回數據了。
.setinputsizes(sizes)
方法:
此方法可用在調用.execute
系列方法之前使用,用于預定義內存區域。size參數接收一個序列類型的值,每一個元素對應一個輸入參數,該元素應該是一個類型對象,對于將要使用的參數,或者是一個整數,用于指定字符串的最大長度。如果元素是None,則沒有預定義的內存區域作為保留區域。
.setoutputsize(size[,column])
方法:
為一個很大的列設置緩沖區大小,不指定將使用默認大小。
事務是數據庫管理系統執行過程中的一個邏輯單位,由一個有限的數據庫操作序列構成,事務的目的性是為了保證數據的一致性。假設銀行轉賬操作,從A賬戶轉賬100元到B賬戶需要進行至少兩次的數據庫修改操作,A賬戶余額需要減少100元,B賬戶余額需要增加100元,如果因為由于外部原因導致程序意外終止,就會操作數據出錯,事務就是防止此情況的發生。
數據庫事務擁有四個特性,習慣稱之為ACID特性:
1、原子性(Atomicity):事務作為一個整體被執行,包含在其中的對數據庫的操作要么全部被執行,要么不執行。
2、一致性(Consistency):事務應確保數據庫的狀態從一個一致狀態轉變為另一個一致狀態,一致狀態的含義是數據庫中的數據應滿足完整性約束。
3、隔離性(Isolation):多個事務并發執行時,一個事務的執行不應影響其他事務的執行。
4、持久性(Durability):已被提交的事務對數據庫的修改應該永久保存在數據庫中。
import pprint import pymysql host = 'localhost' # 主機地址 username = 'root' # 數據庫用戶名 password = '' # 數據庫密碼 db_name = 'test' # 數據庫名稱 # 創建connect對象,插入中文時需要指定編碼格式 connect = pymysql.connect(host=host, user=username, password=password, database=db_name, charset='utf8') # 獲取游標對象查詢返回字典 cursor = connect.cursor(pymysql.cursors.DictCursor) # 正確的插入數據的SQL命令 insert_sql1 = ''' INSERT INTO users (name, age) VALUES ('羅賓', 18),('喬巴', 16) ''' # 錯誤的插入數據的SQL命令 insert_sql2 = ''' INSERT INTO users (name, age) VALUES ('弗蘭奇') ''' try: # 插入數據到數據表 cursor.execute(insert_sql1) cursor.execute(insert_sql2) # 提交任何掛起的事務到數據庫 connect.commit() except Exception as e: # 執行失敗發送數據回滾,回滾到事務開始時的狀態 connect.rollback() # 查詢數據 cursor.execute('SELECT * FROM users') # 返回全部數據 result_all = cursor.fetchall() print('---fetchall---') pprint.pprint(result_all) # 關閉游標 cursor.close() # 關閉數據庫連接 connect.close()
看完上述內容,你們對怎么在Python中操作MySQL數據庫有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。