Python更新数据库脚本两种方法及对比介绍


Posted in Python onJuly 27, 2017

最近项目的两次版本迭代中,根据业务需求的变化,需要对数据库进行更新,两次分别使用了不同的方式进行更新。

第一种:使用python的MySQLdb模块利用原生的sql语句进行更新

import MySQLdb
#主机名
HOST = '127.0.0.1'
#用户名
USER = "root"
#密码
PASSWD = "123456"
#数据库名
DB = "db_name"
# 打开数据库连接
db=MySQLdb.connect(HOST,USER,PASSWD,DB)
# 获取操作游标
cursor=db.cursor()
if __name__ == '__main__':
  if cursor:
    command_a = "update tables_one set status=5 where status=0"
    # 使用execute方法执行SQL语句
    cursor.execute(command_a)
    # 提交到数据库执行
    db.commit()
    command2 = "select field from tables_one where id =12"
    ret2 = cursor.execute(command2)
    # 获取所有记录列表
    ret2=cursor.fetchall()
    for item in ret2:
        command3 = "insert into tables_two(name) values (%s);" % (item[0])
        fin=cursor.execute(command3)
        db.commit()
    # 关闭数据库连接
    db.close()

数据库查询三种方式

  • fetchone(): 该方法获取下一个查询结果集。结果集是一个对象
  • fetchall():接收全部的返回结果行.
  • rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。

第二种:使用python的框架flask和sqlalchemy进行更新

# -*- coding:utf-8 -*-
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.sql import text
HOST = '127.0.0.1'
USER = "root"
PASSWD = "123456"
DB = "carrier_test"
CHARTSET = "utf8"
app = Flask(__name__,instance_relative_config = True)
#链接数据库路径
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://%s:%s@127.0.0.1:3306/%s?charset=%s' %(USER,PASSWD,DB,CHARTSET)
#如果设置成 True (默认情况),Flask-SQLAlchemy 将会追踪对象的修改并且发送信号。这需要额外的内存, 如果不必要的可以禁用它。
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
#如果设置成 True,SQLAlchemy 将会记录所有 发到标准输出(stderr)的语句,这对调试很有帮助。
app.config['SQLALCHEMY_ECHO'] = False
# 数据库连接池的大小。默认是数据库引擎的默认值 (通常是 5)。
app.config['SQLALCHEMY_POOL_SIZE'] = 6
db = SQLAlchemy(app)
class Table_one(db.Model):
  __tablename__ = 'table_one'
  id = db.Column('id', db.Integer, primary_key=True, autoincrement=True)
  com_name = db.Column('com_name', db.String(30), nullable=False)
  com_about = db.Column('com_about', db.String(200), nullable=False)
  def __repr__(self):
    return '<table_one com_name %r>' % self.com_name
class Table_two(db.Model):
  __tablename__ = 'table_two'
  id = db.Column('id', db.Integer, primary_key=True, autoincrement=True)
  reason = db.Column('reason', db.String(128), nullable=True)
  create_time = db.Column('create_time', db.TIMESTAMP, server_default=text('now()'))
  status = db.Column('status', db.Integer, nullable=False, default=0)
  def __repr__(self):
    return '<table_two id %r>' % self.id
def db_commit_all(lists):
  try:
    db.session.add_all(lists)
    db.session.commit()
    return 'SUCCESS'
  except Exception,e:
    return 'Fail!!!'
def commits_to_three_judge():
  com_sta_obj = Table_one.query.filter_by(com_name='只是测试使用,不用关心表间关系').all()
  for ite in com_sta_obj:
    ship_obj = Table_two.query.filter_by(id=ite.id).first()
    if ship_obj:
      if int(ship_obj.status) == 2:
        ite.status = 0
        print db_commit_all([ite])
  print '表同步结束'
64 
if __name__=='__main__':
  #执行更新数据库函数
  commits_to_three_judge()

两种方式对比:

1.在实际项目中,数据库的更新 需要用到很多相关函数进行数据的收集,判断是否满足条件等,而这些相关函数在项目中都是用 Sqlalchemy进行数据相关操作,比如第二种方法里的db_commit_all()函数

2.使用第二种方法,直接复制这些函数到脚本中即可,如果使用第一种方法,则需要重写相关函数,增加开发时间,浪费精力。

3.如果项目中是使用flask进行开发,推荐使用第二种方法进行数据库更新。

总结

以上所述是小编给大家介绍的Python更新数据库脚本两种方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python实现数值积分的Simpson方法实例分析
Jun 05 Python
Python通过Pygame绘制移动的矩形实例代码
Jan 03 Python
Python基于OpenCV实现视频的人脸检测
Jan 23 Python
python删除过期log文件操作实例解析
Jan 31 Python
python绘制评估优化算法性能的测试函数
Jun 25 Python
Django 实现admin后台显示图片缩略图的例子
Jul 28 Python
AUC计算方法与Python实现代码
Feb 28 Python
Python函数生成器原理及使用详解
Mar 12 Python
Python 通过正则表达式快速获取电影的下载地址
Aug 17 Python
python实现scrapy爬虫每天定时抓取数据的示例代码
Jan 27 Python
pytorch 如何使用amp进行混合精度训练
May 24 Python
Python虚拟环境virtualenv是如何使用的
Jun 20 Python
Python判断文件或文件夹是否存在的三种方法
Jul 27 #Python
Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】
Jul 27 #Python
Python基于tkinter模块实现的改名小工具示例
Jul 27 #Python
python django 增删改查操作 数据库Mysql
Jul 27 #Python
Python中Selenium模拟JQuery滑动解锁实例
Jul 26 #Python
Python列表和元组的定义与使用操作示例
Jul 26 #Python
老生常谈Python之装饰器、迭代器和生成器
Jul 26 #Python
You might like
Zend Framework+smarty用法实例详解
2016/03/19 PHP
formvalidator验证插件中有关ajax验证问题
2013/01/04 Javascript
js获得页面的高度和宽度的方法
2014/02/23 Javascript
JavaScript保留两位小数的2个自定义函数
2014/05/05 Javascript
jQuery类选择器用法实例
2014/12/23 Javascript
JavaScript多线程详解
2015/08/12 Javascript
深入分析jsonp协议原理
2015/09/26 Javascript
浅谈JavaScript中面向对象的的深拷贝和浅拷贝
2016/08/01 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
JavaScript编写一个贪吃蛇游戏
2017/03/09 Javascript
Vue.js手风琴菜单组件开发实例
2017/05/16 Javascript
JavaScript中一些特殊的字符运算
2017/08/17 Javascript
轻量级JS Cookie插件js-cookie的使用方法
2018/03/22 Javascript
微信小程序实现分享朋友圈的图片功能示例
2019/01/18 Javascript
VUE引入第三方js包及调用方法讲解
2019/03/01 Javascript
Vue实现数据表格合并列rowspan效果
2020/11/30 Javascript
Vue 中 a标签上href无法跳转的解决方式
2019/11/12 Javascript
JS如何定义用字符串拼接的变量
2020/07/11 Javascript
python实现数据导出到excel的示例--普通格式
2018/05/03 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
2018/10/18 Python
Python3 安装PyQt5及exe打包图文教程
2019/01/08 Python
PyQt5通信机制 信号与槽详解
2019/08/07 Python
python创建学生管理系统
2019/11/22 Python
Python实现遗传算法(二进制编码)求函数最优值方式
2020/02/11 Python
改变 Python 中线程执行顺序的方法
2020/09/24 Python
HTML5新增的表单元素和属性实例解析
2014/07/07 HTML / CSS
日本土著品牌,综合型购物网站:Cecile
2016/08/23 全球购物
G-Form护具官方网站:美国运动保护装备
2019/09/04 全球购物
俄罗斯便宜的在线服装商店:GroupPrice
2020/04/10 全球购物
法学专业自我鉴定
2014/02/05 职场文书
《水浒传》读后感3篇(范文)
2019/09/19 职场文书
vue Element-ui表格实现树形结构表格
2021/06/07 Vue.js
Pandas 稀疏数据结构的实现
2021/07/25 Python
Spring Security中用JWT退出登录时遇到的坑
2021/10/16 Java/Android
Python字符串常规操作小结
2022/04/03 Python
python+opencv实现目标跟踪过程
2022/06/21 Python