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实现把回车符\r\n转换成\n
Apr 23 Python
简介Python的collections模块中defaultdict类型的用法
Jul 07 Python
python基础教程之Filter使用方法
Jan 17 Python
python 计算两个日期相差多少个月实例代码
May 24 Python
Python模糊查询本地文件夹去除文件后缀的实例(7行代码)
Nov 09 Python
解决python3中自定义wsgi函数,make_server函数报错的问题
Nov 21 Python
Python 从一个文件中调用另一个文件的类方法
Jan 10 Python
Python基础教程之if判断,while循环,循环嵌套
Apr 25 Python
python中使用while循环的实例
Aug 05 Python
浅谈优化Django ORM中的性能问题
Jul 09 Python
matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解
Jan 05 Python
Python自动操作神器PyAutoGUI的使用教程
Jun 16 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
PHP读取MySQL数据代码
2008/06/05 PHP
PHP 数组和字符串互相转换实现方法
2013/03/26 PHP
IIS+fastcgi下PHP运行超时问题的解决办法详解
2013/06/20 PHP
PHP编程中的Session阻塞问题与解决方法分析
2017/08/07 PHP
JS控制显示隐藏兼容问题(IE6、IE7、IE8)
2010/04/01 Javascript
jquery实现弹出div,始终显示在屏幕正中间的简单实例
2014/03/08 Javascript
js实现checkbox全选、不选与反选的方法
2015/02/09 Javascript
js实现的彩色方块飞舞奇幻效果
2016/01/27 Javascript
深入浅析JS Function()构造函数
2016/08/22 Javascript
springMVC + easyui + $.ajaxFileUpload实现文件上传注意事项
2017/04/23 Javascript
jQuery Validate 校验多个相同name的方法
2017/05/18 jQuery
angular+webpack2实战例子
2017/05/23 Javascript
Mongoose实现虚拟字段查询的方法详解
2017/08/15 Javascript
vue学习笔记之v-if和v-show的区别
2017/09/20 Javascript
vue cli 3.0 使用全过程解析
2018/06/14 Javascript
为什么要使用Vuex的介绍
2019/01/19 Javascript
ES6中异步对象Promise用法详解
2019/07/31 Javascript
vue中可编辑树状表格的实现代码
2020/10/31 Javascript
详解JavaScript执行模型
2020/11/16 Javascript
[10:04]国际邀请赛采访专栏:DK.Farseer,mouz.Black^,采访员Josh专访
2013/08/05 DOTA
[05:07]DOTA2英雄梦之声_第14期_暗影恶魔
2014/06/20 DOTA
[47:03]Ti4第二日主赛事败者组 LGD vs iG 2
2014/07/21 DOTA
[49:18]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 OG vs TNC
2018/04/01 DOTA
python基本语法练习实例
2017/09/19 Python
django中send_mail功能实现详解
2018/02/06 Python
pandas取出重复数据的方法
2019/07/04 Python
python psutil模块使用方法解析
2019/08/01 Python
自定义Django默认的sitemap站点地图样式
2020/03/04 Python
如何打包Python Web项目实现免安装一键启动的方法
2020/05/21 Python
世界领先的在线地板和建筑材料批发商:BuildDirect
2017/02/26 全球购物
高中生操行评语
2014/04/25 职场文书
银行客户经理岗位职责
2015/04/09 职场文书
幼儿园家长工作总结2015
2015/04/25 职场文书
关于实现中国梦的心得体会
2016/01/05 职场文书
2016机关干部作风建设心得体会
2016/01/21 职场文书
一行Python命令实现批量加水印
2022/04/07 Python