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实现的扫雷游戏实例代码
Aug 01 Python
python解决pandas处理缺失值为空字符串的问题
Apr 08 Python
Python根据当前日期取去年同星期日期
Apr 14 Python
Python文件操作中进行字符串替换的方法(保存到新文件/当前文件)
Jun 28 Python
python实现共轭梯度法
Jul 03 Python
在jupyter notebook中调用.ipynb文件方式
Apr 14 Python
Pycharm Git 设置方法
Sep 15 Python
python通过函数名调用函数的几种场景
Sep 23 Python
python 两种方法删除空文件夹
Sep 29 Python
python 使用openpyxl读取excel数据
Feb 18 Python
Python制作表白爱心合集
Jan 22 Python
详解Python中*args和**kwargs的使用
Apr 07 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编写注册后Email激活验证的实例代码
2013/03/11 PHP
分享微信扫码支付开发遇到问题及解决方案-附Ecshop微信支付插件
2015/08/23 PHP
PHP请求远程地址设置超时时间的解决方法
2016/10/29 PHP
php实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】
2017/04/18 PHP
PHP基于递归实现的约瑟夫环算法示例
2017/08/27 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患分析
2019/02/28 PHP
PHP swoole和redis异步任务实现方法分析
2019/08/12 PHP
判断是否输入完毕再激活提交按钮
2006/06/26 Javascript
JQuery AJAX实现目录浏览与编辑的代码
2008/10/21 Javascript
jquery checkbox,radio是否选中的判断代码
2010/03/20 Javascript
jQuery中绑定事件的命名空间详解
2011/04/05 Javascript
jQuery(非HTML5)可编辑表格实现代码
2012/12/11 Javascript
给angular加上动画效遇到的问题总结
2016/02/17 Javascript
AngularJS基于provider实现全局变量的读取和赋值方法
2017/06/28 Javascript
vue2.0 兄弟组件(平级)通讯的实现代码
2018/01/15 Javascript
关于vue v-for循环解决img标签的src动态绑定问题
2018/09/18 Javascript
详解关于element el-button使用$attrs的一个注意要点
2018/11/09 Javascript
微信小程序实现音频文件播放进度的实例代码
2020/03/02 Javascript
[16:56]heroes英雄教学 司夜刺客
2014/09/18 DOTA
Python的lambda匿名函数的简单介绍
2013/04/25 Python
Django REST为文件属性输出完整URL的方法
2017/12/18 Python
python实现识别手写数字 python图像识别算法
2020/03/23 Python
python matplotlib 在指定的两个点之间连线方法
2018/05/25 Python
TensorFlow实现模型评估
2018/09/07 Python
Python对excel文档的操作方法详解
2018/12/10 Python
Python代码打开本地.mp4格式文件的方法
2019/01/03 Python
Python多项式回归的实现方法
2019/03/11 Python
Python requests接口测试实现代码
2020/09/08 Python
Python图像处理之膨胀与腐蚀的操作
2021/02/07 Python
动物科学专业毕业生的自我评价
2013/11/29 职场文书
代办社保委托书范文
2014/10/06 职场文书
销售工作决心书
2015/02/04 职场文书
因身体原因离职的辞职信范文
2015/05/12 职场文书
英语专业毕业论文答辩开场白
2015/05/27 职场文书
关于MybatisPlus配置双数据库驱动连接数据库问题
2022/01/22 Java/Android