返回目標python
安裝mysql:
sudo apt-get install -y mysql-server mysql-client
git
啓動、關閉和重啓MySQL服務:
sudo service mysql start
sudo service mysql stop
sudo service mysql restart
sudo service mysql status:查看狀態
netstat -an|grep 3306:查看mysql是否啓動成功,監聽3306端口github
安裝pymysql:
pip3 install pymysql
sql
返回目標數據庫
連接以前,要啓動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()
屬性 | 解釋 |
---|---|
原子性(atomicity) | 事務是一個不可分割的工做單位,事務中包括的諸操做要麼都作,要麼都不作 |
一致性(consistency) | 事務必須使數據庫從一個一致性狀態變到另外一個一致性狀態。一致性與原子性是密切相關的 |
隔離性(isolation) | 一個事務的執行不能被其餘事務干擾,即一個事務內部的操做及使用的數據對併發的其餘事務是隔離的,併發執行的各個事務之間不能互相干擾 |
持久性(durability) | 持續性也稱永久性(permanence),指一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的。接下來的其餘操做或故障不該該對其有任何影響 |
try: cursor.execute(sql) cursor.commit() # 提交,數據才被真正寫到了數據庫中 except: db.rollback() # 回滾操做,至關與沒有進行操做
INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN );
# 封裝了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()
UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]
# 一種去重的方法,若是數據存在,則更新數據;若是數據不存在,則插入數據 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倍
DELETE FROM table_name [WHERE Clause]
# 將條件看成字符串來傳遞,以實現刪除操做 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()
SELECT column_name,column_name FROM table_name [WHERE Clause] [LIMIT N][ OFFSET M]
cursor.execute(sql) print('Count:', cursor.rowcount) # rowcount屬性獲取查詢結果的條數 one = cursor.fetchone() # fetchone()方法,這個方法能夠獲取結果的第一條數據,返回結果是元組形式 print('One:', one) results = cursor.fetchall() # fetchall()方法返回的是偏移指針指向的數據一直到結束的全部數據