本文連接Python 操做 MySQLpython
開發環境與配置mysql
直接使用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)
複製代碼