關係型數據庫是基於關係模型的數據庫,而關係模型是經過二維表來保存的,因此它的存儲方式就是行列組成的表。多個表組成一個數據庫。python
關係型數據庫有多種,如MySQl、Oracle、SQLite、SQL Server等。mysql
首先須要安裝MySQL數據庫和相關的庫web
下載「mysql-installer-web-community-8.0.11.0.msi」,而後點擊Next直接安裝便可。sql
若是想要和Python交互的話,還須要安裝PyMySQL。數據庫
安裝完成後驗證是否安裝成功:fetch
>>> import pymysql >>> pymysql.VERSION (0, 9, 2, None)
利用PyMySQL鏈接MySQL,而後建立一個新的數據庫,名字叫做chenzf。編碼
import pymysql db = pymysql.connect(host='localhost', user='root', password='1xxxxx8', port=3306) cursor = db.cursor() cursor.execute('SELECT VERSION()') data = cursor.fetchone() print('Database version:', data) cursor.execute("CREATE DATABASE chenzf DEFAULT CHARACTER SET utf8mb4") db.close()
運行結果爲:spa
Database version: ('8.0.11',)
經過connect()方法聲明一個MySQL鏈接對象db,因爲MySQL在本地運行,因此傳入的是localhost;端口號是默認的。鏈接成功後,調用cursor()方法得到MySQL的操做遊標,利用遊標來執行兩句SQL語句,直接用execute()方法執行便可。第一句SQL語句用於得到數據庫的版本,調用fetchone()方法得到第一條數據,第二句SQL語句建立一個新的數據庫,默認編碼是utf8mb4。code
建立數據庫的操做只需執行一次就好,接下來新建立一個students數據表:orm
import pymysql db = pymysql.connect(host='localhost', user='root', password='xxxxxx', port=3306, db='chenzf') cursor = db.cursor() sql = """CREATE TABLE IF NOT EXISTS students ( id VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, age INT NOT NULL, PRIMARY KEY (id))""" cursor.execute(sql) db.close()
運行結果:
向數據庫中插入信息:
import pymysql new_id = '20180001' new_user = 'chen' new_age = 25 db = pymysql.connect(host='localhost', user='root', password='xxxxx', port=3306, db='chenzf') cursor = db.cursor() sql = 'INSERT INTO students(id, name, age) values(%s, %s, %s)' try: cursor.execute(sql, (new_id, new_user, new_age)) db.commit() except: db.rollback() db.close()
須要執行db對象的commit()方法才能夠實現數據插入,這個方法纔是真正將語句提交到數據庫執行的方法。對於數據插入、更新、刪除操做,都需調用該方法才能生效。
加入異常處理,若是執行失敗,則調用rollback()執行數據回滾。
這裏涉及到事務問題:事務機制能夠確保數據的一致性,也就是這件事要麼發生了,要麼沒有發生。插入、刪除、更新操做都必須是一個事務,因此這些操做的標準寫法是:
try: cursor.execute(sql) db.commit() except: db.rollback()運行結果:
爲了方便插入數據,須要構造一個通用方法:傳入動態變化的字典!
import pymysql data = { 'id': '20180002', 'name': 'BOB', 'age': 25 } table = 'students' # 表名 keys = ', '.join(data.keys()) # 用逗號隔開 values = ', '.join(['%s'] * len(data)) # 構造%s, %s, %s # sql = 'INSERT INTO students(id, name, age) values(%s, %s, %s)' sql = 'INSERT INTO {table}({keys}) VALUES ({values})'.format(table=table, keys=keys, values=values) db = pymysql.connect(host='localhost', user='root', password='120618', port=3306, db='chenzf') cursor = db.cursor() try: # cursor.execute(sql, (new_id, new_user, new_age)) cursor.execute(sql, tuple(data.values())) print('Successful') db.commit() except: print('Failed') db.rollback() db.close()
運行結果: