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实现代理服务功能实例
Nov 15 Python
python对象及面向对象技术详解
Jul 19 Python
Python实现可自定义大小的截屏功能
Jan 20 Python
Python制作动态字符图的实例
Jan 27 Python
python 一个figure上显示多个图像的实例
Jul 08 Python
Windows下python3安装tkinter的问题及解决方法
Jan 06 Python
python 装饰器功能与用法案例详解
Mar 06 Python
django 扩展user用户字段inlines方式
Mar 30 Python
Jupyter notebook无法导入第三方模块的解决方式
Apr 15 Python
Python自定义聚合函数merge与transform区别详解
May 26 Python
python实现画图工具
Aug 27 Python
python调用jenkinsAPI构建jenkins,并传递参数的示例
Dec 09 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
WINXP下apache+php4+mysql
2006/11/25 PHP
Ping服务的php实现方法,让网站快速被收录
2012/02/04 PHP
PHP时间戳 strtotime()使用方法和技巧
2013/10/29 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
js表格分页实现代码
2009/09/18 Javascript
超级好用的jQuery圆角插件 Corner速成
2014/08/31 Javascript
jQuery实现鼠标经过事件的延时处理效果
2020/08/20 Javascript
详解javascript实现自定义事件
2016/01/19 Javascript
JS实现table表格数据排序功能(可支持动态数据+分页效果)
2016/05/26 Javascript
微信小程序 数据封装,参数传值等经验分享
2017/01/09 Javascript
利用vue和element-ui设置表格内容分页的实例
2018/03/02 Javascript
layui前端框架之table表数据的刷新方法
2018/08/17 Javascript
详解VSCode配置启动Vue项目
2019/05/14 Javascript
详解Vue的mixin策略
2020/11/19 Vue.js
微信小程序实现下拉加载更多商品
2020/12/29 Javascript
基于JavaScript实现轮播图效果
2021/01/02 Javascript
[36:14]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第二局
2016/02/28 DOTA
[03:03]DOTA2 2017国际邀请赛开幕战队入场仪式
2017/08/09 DOTA
python打开文件并获取文件相关属性的方法
2015/04/23 Python
python实现一次创建多级目录的方法
2015/05/15 Python
python访问抓取网页常用命令总结
2017/04/11 Python
不可错过的十本Python好书
2017/07/06 Python
django如何自己创建一个中间件
2019/07/24 Python
基于zepto的插件之移动端无缝向上滚动并上下触摸滑动实例代码
2016/12/20 HTML / CSS
LUISAVIAROMA中国官网:时尚奢侈品牌购物网站
2020/11/01 全球购物
PHP中如何创建和修改数组
2012/05/02 面试题
How TDD works
2012/09/30 面试题
Java程序员面试90题
2013/10/19 面试题
环境科学毕业生自荐信
2013/11/21 职场文书
团队经理竞聘书
2014/03/31 职场文书
学校党的群众路线教育实践活动总结报告
2014/07/03 职场文书
奥巴马经典演讲稿
2014/09/13 职场文书
统计工作个人总结
2015/03/03 职场文书
2015年酒店工作总结范文
2015/04/07 职场文书
关于python中模块和重载的问题
2021/11/02 Python
vue中this.$http.post()跨域和请求参数丢失的解决
2022/04/08 Vue.js