Python 操作 MySQL数据库


Posted in Python onSeptember 18, 2020

开发环境与配置

  • win_x64
  • Ubuntu14.04
  • Python3.x

pip安装pymysql模块

直接使用pip安装 pip install pymysql
win64上直接在cmd中执行

连接本地数据库

使用模块pymysql连接数据库

本地数据库相关配置请参阅: http://rustfisher.github.io/2017/02/25/backend/MySQL_install/

#!/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 --')

输出:

(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相似条件查询

SELECT * FROM anindex.subject_basic_table where season_id having '2018';

插入数据

插入一条数据,接上面的代码

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

添加列

在mobile后面添加一列cash

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

如果要设置默认值

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)

以上就是Python 如何操作 MySQL的详细内容,更多关于Python 操作 MySQL的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
用Python的urllib库提交WEB表单
Feb 24 Python
Python中字典的基础知识归纳小结
Aug 19 Python
python enumerate函数的使用方法总结
Nov 15 Python
浅谈Python脚本开头及导包注释自动添加方法
Oct 27 Python
PyQt5+requests实现车票查询工具
Jan 21 Python
Python 进程之间共享数据(全局变量)的方法
Jul 16 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
Aug 05 Python
python3 enum模块的应用实例详解
Aug 12 Python
Django shell调试models输出的SQL语句方法
Aug 29 Python
python matplotlib饼状图参数及用法解析
Nov 04 Python
Python3 全自动更新已安装的模块实现
Jan 06 Python
python多线程实现代码(模拟银行服务操作流程)
Jan 13 Python
python实现人工蜂群算法
Sep 18 #Python
Python猫眼电影最近上映的电影票房信息
Sep 18 #Python
python实现简单遗传算法
Sep 18 #Python
详解python 支持向量机(SVM)算法
Sep 18 #Python
python利用线程实现多任务
Sep 18 #Python
Pycharm的Available Packages为空的解决方法
Sep 18 #Python
Pycharm Available Package无法显示/安装包的问题Error Loading Package List解决
Sep 18 #Python
You might like
十大“创意”战术!
2020/03/04 星际争霸
深入php 正则表达式的学习探讨
2013/06/06 PHP
php判断字符串在另一个字符串位置的方法
2014/02/27 PHP
3个PHP多维数组转为一维数组的方法实例
2014/03/13 PHP
javascript判断单选框或复选框是否选中方法集锦
2007/04/04 Javascript
document.compatMode介绍
2009/05/21 Javascript
js调用css属性写法
2013/09/21 Javascript
jQuery的基本概念与高级编程
2015/05/14 Javascript
JS中dom0级事件和dom2级事件的区别介绍
2016/05/05 Javascript
JavaScript中的原型prototype完全解析
2016/05/10 Javascript
javascript 数组的定义和数组的长度
2016/06/07 Javascript
javascript实现的全国省市县无刷新多级关联菜单效果代码
2016/08/01 Javascript
JavaScript获取中英文混合字符串长度的方法示例
2017/02/04 Javascript
基于JS实现仿京东搜索栏随滑动透明度渐变效果
2017/07/10 Javascript
浅谈原型对象的常用开发模式
2017/07/22 Javascript
jQuery实现鼠标滑过商品小图片上显示对应大图片功能【测试可用】
2018/04/27 jQuery
NodeJs操作MongoDB教程之分页功能以及常见问题
2019/04/09 NodeJs
vue v-for直接循环数字实例
2019/11/07 Javascript
原生js实现瀑布流效果
2020/03/09 Javascript
JS实现鼠标按下拖拽效果
2020/07/23 Javascript
[02:42]DOTA2城市挑战赛收官在即 四强之争风起云涌
2018/06/05 DOTA
Python yield使用方法示例
2013/12/04 Python
python中self原理实例分析
2015/04/30 Python
Python栈的实现方法示例【列表、单链表】
2020/02/22 Python
Django admin 实现search_fields精确查询实例
2020/03/30 Python
澳大利亚领先的皮肤诊所:Skin Matrix(抗衰老、痤疮专家、药妆护肤)
2018/05/20 全球购物
维多利亚的秘密阿联酋官网:Victoria’s Secret阿联酋
2019/12/07 全球购物
职业生涯规划怎么写
2013/12/29 职场文书
电子商务专业学生职业生涯规划
2014/03/07 职场文书
建筑工程质量通病防治方案
2014/06/08 职场文书
2014年银行信贷员工作总结
2014/12/08 职场文书
保研导师推荐信
2015/03/25 职场文书
经营场所使用证明
2015/06/19 职场文书
大学迎新生欢迎词
2015/09/29 职场文书
开网店计划分析
2019/07/30 职场文书
Python用tkinter实现自定义记事本的方法详解
2022/03/31 Python