python下mysql的簡單操作示例
阿新 • • 發佈:2018-12-10
import pymysql # 建立資料庫 # 通過connect方法宣告一個mysql連結物件db,然後傳入相應的引數 db = pymysql.connect(host = 'localhost',user = 'root',password = 'asdfgh',port = 3306) # 使用cursor方法獲得mysql的操作遊標,利用遊標來執行sql語句,這裡直接用execute()方法 cursor = db.cursor() cursor.execute('SELECT VERSION()') # 呼叫fetchone方法獲得第一條資料,得到版本號 data = cursor.fetchone() print('database version:',data) cursor.execute('CREATE DATABASE spiders DEFAULT CHARACTER SET utf8') db.close() # 建立表 import pymysql db = pymysql.connect(host = 'localhost',user = 'root',password = 'asdfgh',port = 3306) # 使用cursor方法獲得mysql的操作遊標,利用遊標來執行sql語句,這裡直接用execute()方法 cursor = db.cursor() cursor.execute('CREATE TABLE IF NOT EXISTS students (id VARCHAR(255) NOT NULL,name VARCHAR(255) NOT NULL,age INT NOT NULL,PRIMARY KEY(id))') db.close() # 插入資料 import pymysql id = '0' user = 'bb' age = '20' db = db = pymysql.connect(host = 'localhost',user = 'root',password = 'asdfgh',port = 3306) cursor = db.cursor() # 有幾個value就寫多少個%s sql = 'INSERT INTO student(id,name,age) values(%s,%s,%s)' try: cursor.execute(sql,(id,user,age)) # 需要執行db物件的commit方法才可以實現資料插入,更新,刪除等,這個方法是真正將語句提交到資料庫中執行的方法 db.commit() except: # 執行rollback方法來進行資料回滾,就當啥也沒發生 db.rollback() db.close() # 更新資料 # SQL語句會根據字典動態構造,元組也動態構造,這樣才能實現通用的插入方法 data = { id :'0', user : 'bb', age : '20' } table = 'student' keys = ','.join(data.keys()) values = ','.join(['%s'] * len(data)) # 利用字串的format方法將表名,欄位名,和佔位符構造出來 # ON DUPLICATE KEY UPDATE表示的是如果主鍵已經存在,就執行更新操作,一種比較靈活的去重的方法 sql = 'INSERT INTO {table}({keys}) VALUES({values}) ON DUPLICATE KEY UPDATE'.format(table = table,keys = keys,values = values) update = ','.join(["{key} = %s".format(key=key)for key in data]) sql += update try: if cursor.execute(sql,table(data.values())*2): print('successful') db.commit() except: print('fail') db.rollback() db.close() # 刪除資料 # 只需要指定要刪除的目標表名,刪除條件 table = 'student' condition = 'age' > '20' sql = 'DELETE FROM {table} WHERE {condition}'.format(table= table,condition = condition) try: cursor.execute(sql) db.commit() except: db.rollback() db.close() # 查詢資料 sql = 'SELECT * FORM student WHERE age >= 20' try: cursor.execute(sql) # 呼叫cursor的rowcount屬性獲取查詢結果的條數 print('COUNT:',cursor.rowcount) one = cursor.fetchone() print('one:',one) # 呼叫fetchall方法,得到結果的所有資料,是一個二重元組,但是如果資料量很大的話,佔用記憶體會很大 # 可以考慮下使用fetchone來以元組的方式返回,每迴圈一次,指標就會偏移一條資料,隨用隨取,簡單高效 results = cursor.fetchall() print('results:',results) for row in results: print(row) except: print('error')