pymysql操作mysql


pymysql操作mysql

安裝,啟動及鏈接

返回目標

MySQL

pymysql

安裝pymysql:
pip3 install pymysql

鏈接數據庫

返回目標

鏈接之前,要啟動mysql

import pymysql  # 1.導入pymysql包

db = pymysql.connect(host='localhost', user='root',
    password='123456',port=3306)  # 2.聲明一個MySQL連接對象db,在遠程host傳入其公網ip
cursor =db.cursor()  # 3.獲得操作游標
cursor.execute('SELECT VERSION()')  # 4.通過游標進行操作,execute()執行sql語句
data = cursor.fetchone()  # 獲得第一條數據
print('Database version:', data)
cursor.execute("CREATE DATABASE spiders DEFAULT CHARACTER SET utf8") # 創建數據庫,默認utf-8編碼
db.close()  # 5.關閉連接

創建表

返回目標

創建數據庫后,在連接時需要額外指定一個參數db

import pymysql

db = connect(host='localhost', user='root',
    password='123456', port=3306, db='spiders')  #創建數據庫后,在連接時需要額外指定一個參數db
cursor = db.cursor()
cursor.execute('CREAT TABLE IF NOT EXISTS students (id VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, age INT NOT NULL, PRIMARY KEY (id))')
db.close()

事務性ACID

屬性 解釋
原子性(atomicity) 事務是一個不可分割的工作單位,事務中包括的諸操作要么都做,要么都不做
一致性(consistency) 事務必須使數據庫從一個一致性狀態變到另一個一致性狀態。一致性與原子性是密切相關的
隔離性(isolation) 一個事務的執行不能被其他事務干擾,即一個事務內部的操作及使用的數據對並發的其他事務是隔離的,並發執行的各個事務之間不能互相干擾
持久性(durability) 持續性也稱永久性(permanence),指一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的。接下來的其他操作或故障不應該對其有任何影響
  • 更改操作(增刪改)事務性標准寫法:
try:
    cursor.execute(sql)
    cursor.commit()  # 提交,數據才被真正寫到了數據庫中
except:
    db.rollback()  # 回滾操作,相當與沒有進行操作

插入數據

返回目標

  • sql語法:
INSERT INTO table_name ( field1, field2,...fieldN )
                       VALUES
                       ( value1, value2,...valueN );
  • python操作
# 封裝了sql語句和插入操作

data = {
    'id': '2012001',
    'name': 'Bob',
    'age':20
    }
table = 'students'
keys = ','.join(data.keys())
values = ', '.join(['%s'] * len(data))
sql = 'INSERT INTO {table}({keys}) VALUES ({values})'.format(table=table, keys=keys, values=values)
try:
   if cursor.execute(sql, tuple(data.values())):
       print('Successful')
       db.commit()
except:
    print('Failed')
    db.rollback()
db.close()

更新數據

返回目標

  • sql語法
UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]
  • python操作
# 一種去重的方法,如果數據存在,則更新數據;如果數據不存在,則插入數據

data = {
    'id': '20120001',
    'name': 'Bob',
    'age': 21
}
 
table = 'students'
keys = ', '.join(data.keys())
values = ', '.join(['%s'] * len(data))
 
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, tuple(data.values())*2):
        print('Successful')
        db.commit()
except:
    print('Failed')
    db.rollback()
db.close()

ON DUPLICATE KEY UPDATE:意思是如果主鍵已經存在,就執行更新操作

完整的SQL構造出來是:INSERT INTO students(id, name, age) VALUES (%s, %s, %s) ON DUPLICATE KEY UPDATE id = %s, name = %s, age = %s所以execute()方法的第二個參數元組就需要乘以2變成原來的2倍

刪除數據

返回目錄

  • sql語法
DELETE FROM table_name [WHERE Clause]
  • python操作
# 將條件當作字符串來傳遞,以實現刪除操作

table = 'students'
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 column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]
  • python操作
cursor.execute(sql)
print('Count:', cursor.rowcount)  # rowcount屬性獲取查詢結果的條數
one = cursor.fetchone()  # fetchone()方法,這個方法可以獲取結果的第一條數據,返回結果是元組形式
print('One:', one)
results = cursor.fetchall()  # fetchall()方法返回的是偏移指針指向的數據一直到結束的所有數據


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM