pymysql操做mysql

pymysql操做mysql

安裝,啓動及連接

返回目標python

MySQL

pymysql

安裝pymysql:
pip3 install pymysqlsql

連接數據庫

返回目標數據庫

連接以前,要啓動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.關閉鏈接

建立表

返回目標ide

建立數據庫後,在鏈接時須要額外指定一個參數dbfetch

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()方法返回的是偏移指針指向的數據一直到結束的全部數據
相關文章
相關標籤/搜索