Python 操做 MySQL

本文連接Python 操做 MySQLpython

開發環境與配置mysql

  • win_x64
  • Ubuntu14.04
  • Python3.x

pip安裝pymysql模塊

直接使用pip安裝 pip install pymysql
win64上直接在cmd中執行git

鏈接本地數據庫

使用模塊pymysql鏈接數據庫
本地數據庫相關配置請參閱: rustfisher.github.io/2017/02/25/…github

#!/usr/bin/python
# coding=utf-8
import pymysql

# 鏈接本地數據庫
conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='yourpwd', db='samp_db1', charset='utf8')
cursor = conn.cursor()
cursor.execute('select * from bigstu')
for row in cursor.fetchall():
    print(row)

# 查
cursor.execute('select id, name from bigstu where age > 22')
for res in cursor.fetchall():
    print(str(res[0]) + ", " + res[1])

cursor.close()
print('-- end --')
複製代碼

輸出:sql

(1, '張三', '男', 24, datetime.date(2017, 3, 29), '13666665555')
(6, '小剛', '男', 23, datetime.date(2017, 3, 11), '778899888')
(8, '小霞', '女', 20, datetime.date(2017, 3, 13), '13712345678')
(12, '小智', '男', 21, datetime.date(2017, 3, 7), '13787654321')
1, 張三
6, 小剛
-- end --
複製代碼

能夠直接執行sql語句。得到的結果是元組。數據庫

sql類似條件查詢json

SELECT * FROM anindex.subject_basic_table where season_id having '2018';
複製代碼

插入數據

插入一條數據,接上面的代碼bash

insertSql = "insert into bigstu (name, sex, age, mobile) values ('%s','%s',%d,'%s') "
xiuji = ('秀吉', '男', 15, '13400001111')
cursor.execute(insertSql % xiuji)
conn.commit() # 別忘了提交
複製代碼

添加列

在mobile後面添加一列cashapp

addCo = "alter table bigstu add cash int after mobile"
cursor.execute(addCo)
複製代碼

若是要設置默認值fetch

addCo = "alter table bigstu add cash int default 0 after mobile"
cursor.execute(addCo)
複製代碼

刪除數據

刪除 name=秀吉 的數據

deleteSql = "delete from bigstu where name = '%s'"
cursor.execute(deleteSql % '秀吉')
複製代碼

刪除列

刪除cash列

dropCo = "alter table bigstu drop cash"
cursor.execute(dropCo)
複製代碼

修改數據

更新符合條件的數據

updateSql = "update bigstu set sex = '%s' where name = '%s'"
updateXiuji = ('秀吉', '秀吉') # 秀吉的性別是秀吉
cursor.execute(updateSql % updateXiuji)
conn.commit()
複製代碼

事物處理

給某個記錄的cash增長

table = "bigstu"
addCash = "update " + table + " set cash = cash + '%d' where name = '%s'"
lucky = (1000, "秀吉")

try:
    cursor.execute(addCash % lucky)
except Exception as e:
    conn.rollback()
    print("加錢失敗了")
else:
    conn.commit()
複製代碼

直接執行SQL語句,十分方便

代碼片斷

給數據庫添加列

從json中讀取須要添加的列名,獲取當前2個表中全部的列名
整理得出須要插入的列名,而後將列插入到相應的表中

import pymysql
import json
import os
import secureUtils

mapping_keys = json.load(open("key_mapping_db.json", "r"))
db_keys = []  # json中全部的key

for k in mapping_keys.values():
    db_keys.append(k)

conn = pymysql.connect(host='localhost', port=3306, user='root',
                       passwd='*****', db='db_name', charset='utf8')

cursor = conn.cursor()
table_main = "table_main"
main_table_keys = []  # 主表的列名
cursor.execute("show columns from " + table_main)
for row in cursor.fetchall():
    main_table_keys.append(row[0])

staff_table_keys = []
cursor.execute("show columns from table_second")
for row in cursor.fetchall():
    staff_table_keys.append(row[0])

need_to_insert_keys = []
for k in db_keys:
    if k not in staff_table_keys and k not in main_table_keys and k not in need_to_insert_keys:
        need_to_insert_keys.append(k)

print("need to insert " + str(len(need_to_insert_keys)))
print(need_to_insert_keys)
for kn in need_to_insert_keys:
    print("add key to db " + kn)
    cursor.execute("alter table staff_table add " + kn +" text")

conn.close()
複製代碼

將字段字符改變

這裏將main_table_keys中的全部字段改成utf8

# change column character set to utf8
for co in main_table_keys:
    change_sql = "alter table " + table_main + " modify " + co + " text character set utf8"
    print(change_sql)
    cursor.execute(change_sql)
複製代碼
相關文章
相關標籤/搜索