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 相关文章推荐
pycharm 使用心得(七)一些实用功能介绍
Jun 06 Python
Python实现遍历windows所有窗口并输出窗口标题的方法
Mar 13 Python
利用Fn.py库在Python中进行函数式编程
Apr 22 Python
Python之父谈Python的未来形式
Jul 01 Python
Python编程实现的图片识别功能示例
Aug 03 Python
Python进阶学习之特殊方法实例详析
Dec 01 Python
使用python实现ftp的文件读写方法
Jul 02 Python
python使用pymongo与MongoDB基本交互操作示例
Apr 09 Python
Python正则表达式高级使用方法汇总
Jun 18 Python
python 中的9个实用技巧,助你提高开发效率
Aug 30 Python
Python简易开发之制作计算器
Apr 28 Python
基于Python编写一个监控CPU的应用系统
Jun 25 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
完美实现wordpress禁止文章修订和自动保存的方法
2014/11/03 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
2020/03/24 PHP
JavaScript 学习点滴记录
2009/04/24 Javascript
google 搜索框添加关键字实现代码
2010/04/24 Javascript
js二级地域选择的实现方法
2013/06/17 Javascript
IE6下拉框图层问题探讨及解决
2014/01/03 Javascript
js不能获取隐藏的div的宽度只能先显示后获取
2014/09/04 Javascript
jquery实现左右无缝轮播图
2020/07/31 Javascript
Bootstrap组件(一)之菜单
2016/05/11 Javascript
图解prototype、proto和constructor的三角关系
2016/07/31 Javascript
jQuery简介_动力节点Java学院整理
2017/07/04 jQuery
js实现前面自动补全位数的方法
2018/10/10 Javascript
浅谈发布订阅模式与观察者模式
2019/04/09 Javascript
layui操作列按钮个数和文字颜色的判断实例
2019/09/11 Javascript
Vue js with语句原理及用法解析
2020/09/03 Javascript
一波神奇的Python语句、函数与方法的使用技巧总结
2015/12/08 Python
python字符串连接方法分析
2016/04/12 Python
浅谈python socket函数中,send与sendall的区别与使用方法
2017/05/09 Python
Python实现图片转字符画的示例
2017/08/22 Python
关于Django显示时间你应该知道的一些问题
2017/12/25 Python
pandas 使用apply同时处理两列数据的方法
2018/04/20 Python
基于Python pip用国内镜像下载的方法
2018/06/12 Python
浅谈Pycharm中的Python Console与Terminal
2019/01/17 Python
python中sklearn的pipeline模块实例详解
2020/05/21 Python
Python Unittest原理及基本使用方法
2020/11/06 Python
Python创建自己的加密货币的示例
2021/03/01 Python
CSS3实例分享--超炫checkbox复选框和radio单选框
2014/09/01 HTML / CSS
英国最好的包装供应商:Priory Direct
2019/12/17 全球购物
枚举与#define宏的区别
2014/04/30 面试题
销售行政专员岗位职责
2014/06/10 职场文书
公务员政审个人总结
2015/02/12 职场文书
幼师辞职信怎么写
2015/02/27 职场文书
幼儿园亲子活动通知
2015/04/24 职场文书
迁徙的鸟观后感
2015/06/09 职场文书
「偶像大师 MILLION LIVE!」七尾百合子手办开订
2022/03/21 日漫
R9700摩机记
2022/04/05 无线电