1. 程式人生 > >python下mysql的簡單操作示例

python下mysql的簡單操作示例

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')