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完成FizzBuzzWhizz问题(拉勾网面试题)示例
May 05 Python
利用Python的Twisted框架实现webshell密码扫描器的教程
Apr 16 Python
Python psutil模块简单使用实例
Apr 28 Python
python实现可以断点续传和并发的ftp程序
Sep 13 Python
Python使用内置json模块解析json格式数据的方法
Jul 20 Python
Python使用pylab库实现绘制直方图功能示例
Jun 01 Python
对Python2与Python3中__bool__方法的差异详解
Nov 01 Python
Python实现多进程的四种方式
Feb 22 Python
Python分析彩票记录并预测中奖号码过程详解
Jul 09 Python
基于django micro搭建网站实现加水印功能
May 22 Python
Pytorch - TORCH.NN.INIT 参数初始化的操作
Feb 27 Python
python opencv人脸识别考勤系统的完整源码
Apr 26 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
让你的PHP同时支持GIF、png、JPEG
2006/10/09 PHP
php通过字符串调用函数示例
2014/03/02 PHP
使用php实现网站验证码功能【推荐】
2017/02/09 PHP
Yii2.0中使用js异步删除示例
2017/03/10 PHP
php实例化一个类的具体方法
2019/09/19 PHP
JQUERY THICKBOX弹出层插件
2008/08/30 Javascript
用jQuery模拟页面加载进度条的实现代码
2011/12/19 Javascript
JavaScript列表框listbox全选和反选的实现方法
2015/03/18 Javascript
JS仿京东移动端手指拨动切换轮播图效果
2020/04/10 Javascript
JavaScript 事件对内存和性能的影响
2017/01/22 Javascript
Javascript操作dom对象之select全面解析
2017/04/24 Javascript
javascript修改浏览器title方法 JS动态修改浏览器标题
2017/11/30 Javascript
基于JavaScript实现每日签到打卡轨迹功能
2018/11/29 Javascript
了解javascript中变量及函数的提升
2019/05/27 Javascript
Vue中对iframe实现keep alive无刷新的方法
2019/07/23 Javascript
java实现单链表增删改查的实例代码详解
2019/08/30 Javascript
[54:25]Ti4 循环赛第三日LGD vs MOUZ
2014/07/12 DOTA
[02:33]DOTA2亚洲邀请赛趣味视频之吐真话筒
2018/03/31 DOTA
Python常用内置函数总结
2015/02/08 Python
简单介绍Python中的JSON使用
2015/04/28 Python
Python实现以时间换空间的缓存替换算法
2016/02/19 Python
Python实现的视频播放器功能完整示例
2018/02/01 Python
Python实现爬虫抓取与读写、追加到excel文件操作示例
2018/06/27 Python
python 定时器,轮询定时器的实例
2019/02/20 Python
Python中变量的输入输出实例代码详解
2019/07/28 Python
浅谈pycharm使用及设置方法
2019/09/09 Python
Python搭建代理IP池实现获取IP的方法
2019/10/27 Python
python 实现屏幕录制示例
2019/12/23 Python
利用CSS3实现炫酷的飞机起飞动画
2016/09/17 HTML / CSS
CSS3实现的闪烁跳跃进度条示例(附源码)
2013/08/19 HTML / CSS
电气工程及自动化专业自荐书范文
2013/12/18 职场文书
《诺贝尔》教学反思
2014/02/17 职场文书
离婚答辩状怎么写
2015/05/22 职场文书
论语读书笔记
2015/06/26 职场文书
开学第一天的感想
2015/08/10 职场文书
MySQL数据库索引的最左匹配原则
2021/11/20 MySQL