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模块学习 filecmp 文件比较
Aug 27 Python
使用Python程序抓取新浪在国内的所有IP的教程
May 04 Python
Python多线程扫描端口代码示例
Feb 09 Python
用python处理图片实现图像中的像素访问
May 04 Python
Python实现Selenium自动化Page模式
Jul 14 Python
在Python中预先初始化列表内容和长度的实现
Nov 28 Python
python生成特定分布数的实例
Dec 05 Python
Django框架静态文件处理、中间件、上传文件操作实例详解
Feb 29 Python
Python IDLE或shell中切换路径的操作
Mar 09 Python
Django restful framework生成API文档过程详解
Nov 12 Python
教你用Python写一个植物大战僵尸小游戏
Apr 25 Python
详解NumPy中的线性关系与数据修剪压缩
May 25 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入门基础之php代码写法
2011/12/30 PHP
PHP SOCKET编程详解
2015/05/22 PHP
php读取torrent种子文件内容的方法(测试可用)
2016/05/03 PHP
CI(CodeIgniter)框架视图中加载视图的方法
2017/03/24 PHP
用Javascript做flash做的事..才完成的一个类.Auntion Action var 0.1
2007/02/23 Javascript
Javascript 更新 JavaScript 数组的 uniq 方法
2008/01/23 Javascript
JQuery 表单中textarea字数限制实现代码
2009/12/07 Javascript
判断控件是否已加载完成的代码
2010/02/24 Javascript
Jquery Change与bind事件代码
2011/09/29 Javascript
文本框获得焦点和失去焦点的判断代码
2012/03/18 Javascript
jQuery列表拖动排列具体实现
2013/11/04 Javascript
限制上传文件大小和格式的jQuery插件实例
2015/01/24 Javascript
总结JavaScript设计模式编程中的享元模式使用
2016/05/21 Javascript
[原创]JS基于FileSaver.js插件实现文件保存功能示例
2016/12/08 Javascript
浅析为什么a="abc" 不等于 a=new String("abc")
2017/10/25 Javascript
JavaScript 异步调用
2017/10/25 Javascript
vue axios 表单提交上传图片的实例
2018/03/16 Javascript
jQuery实现简易聊天框
2020/02/08 jQuery
javascript实现点击小图显示大图
2020/11/29 Javascript
Python httplib模块使用实例
2015/04/11 Python
DataFrame中去除指定列为空的行方法
2018/04/08 Python
使用python获取电脑的磁盘信息方法
2018/11/01 Python
python 内置模块详解
2019/01/01 Python
Python 实现域名解析为ip的方法
2019/02/14 Python
Python3.5文件读与写操作经典实例详解
2019/05/01 Python
在OpenCV里使用特征匹配和单映射变换的代码详解
2019/10/23 Python
Python之变量类型和if判断方式
2020/05/05 Python
python+selenium实现12306模拟登录的步骤
2021/01/21 Python
Lovedrobe官网:英国领先的大码服装品牌
2019/09/19 全球购物
后勤园长自我鉴定
2013/10/17 职场文书
学生会干部自荐信
2014/02/04 职场文书
《十六年前的回忆》教学反思
2014/02/14 职场文书
终止合同协议书
2014/04/17 职场文书
高中生国庆节演讲稿范文2014
2014/09/21 职场文书
酒会邀请函
2015/01/31 职场文书
python中的getter与setter你了解吗
2022/03/24 Python