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格式化字符串实例总结
Sep 28 Python
通过数据库向Django模型添加字段的示例
Jul 21 Python
浅谈Python类的__getitem__和__setitem__特殊方法
Dec 25 Python
Python sqlite3事务处理方法实例分析
Jun 19 Python
Python初学时购物车程序练习实例(推荐)
Aug 08 Python
Python操作MySQL数据库的三种方法总结
Jan 30 Python
python基于SMTP协议发送邮件
May 31 Python
python 类的继承 实例方法.静态方法.类方法的代码解析
Aug 23 Python
Python可变参数会自动填充前面的默认同名参数实例
Nov 18 Python
Python创建一个元素都为0的列表实例
Nov 28 Python
双向RNN:bidirectional_dynamic_rnn()函数的使用详解
Jan 20 Python
Python urllib3软件包的使用说明
Nov 18 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中数字检测is_numeric与ctype_digit的区别介绍
2012/10/04 PHP
php上传图片客户端和服务器端实现方法
2015/03/30 PHP
php编写的抽奖程序中奖概率算法
2015/05/14 PHP
详解Laravel视图间共享数据与视图Composer
2016/08/04 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
复制Input内容的js代码_支持所有浏览器,修正了Firefox3.5以上的问题
2010/06/21 Javascript
jquery应该如何来设置改变按钮input的onclick事件
2012/12/10 Javascript
js给onclick事件赋值,动态传参数实例解说
2013/03/28 Javascript
ExtJs设置GridPanel表格文本垂直居中示例
2013/07/15 Javascript
JavaScript开发人员的10个关键习惯小结
2014/12/05 Javascript
DOM基础教程之使用DOM + Css
2015/01/20 Javascript
js实现对ajax请求面向对象的封装
2016/01/08 Javascript
轻松实现JavaScript图片切换
2016/01/12 Javascript
JS动态改变浏览器标题的方法
2016/04/06 Javascript
Angular2入门教程之模块和组件详解
2017/05/28 Javascript
JavaScript学习总结之正则的元字符和一些简单的应用
2017/06/30 Javascript
JavaScript复制内容到剪贴板的两种常用方法
2018/02/27 Javascript
Vue press 支持图片放大功能的实例代码
2018/11/09 Javascript
React父子组件间的传值的方法
2018/11/13 Javascript
详解使用React.memo()来优化函数组件的性能
2019/03/19 Javascript
修改NPM全局模式的默认安装路径的方法
2020/12/15 Javascript
详细解读Python中的__init__()方法
2015/05/02 Python
Python实现FTP上传文件或文件夹实例(递归)
2017/01/16 Python
Python爬虫_城市公交、地铁站点和线路数据采集实例
2018/01/10 Python
详解利用django中间件django.middleware.csrf.CsrfViewMiddleware防止csrf攻击
2018/10/09 Python
pandas把所有大于0的数设置为1的方法
2019/01/26 Python
Django使用rest_framework写出API
2020/05/21 Python
解决selenium+Headless Chrome实现不弹出浏览器自动化登录的问题
2021/01/09 Python
python实现按日期归档文件
2021/01/30 Python
什么是Smart Navigation?
2016/07/03 面试题
中秋节超市促销方案
2014/01/30 职场文书
团委竞选演讲稿
2014/04/24 职场文书
村主任个人对照检查材料
2014/10/01 职场文书
2015年技术工作总结范文
2015/04/20 职场文书
SpringCloud Alibaba 基本开发框架搭建过程
2021/06/13 Java/Android
关于使用Redisson订阅数问题
2022/01/18 Redis