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脚本生成Android SALT扰码的方法
Sep 18 Python
python 七种邮件内容发送方法实例
Apr 22 Python
为Python的web框架编写前端模版的教程
Apr 30 Python
python解析基于xml格式的日志文件
Feb 25 Python
轻松实现TensorFlow微信跳一跳的AI
Jan 05 Python
python OpenCV学习笔记直方图反向投影的实现
Feb 07 Python
python文件拆分与重组实例
Dec 10 Python
Python计算时间间隔(精确到微妙)的代码实例
Feb 26 Python
Python之虚拟环境virtualenv,pipreqs生成项目依赖第三方包的方法
Jul 23 Python
使用python+whoosh实现全文检索
Dec 09 Python
OpenCV3.3+Python3.6实现图片高斯模糊
May 18 Python
Python中re模块的元字符使用小结
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
缅甸的咖啡简史
2021/03/04 咖啡文化
PHP mysql与mysqli事务使用说明 分享
2013/08/17 PHP
php模拟ping命令(php exec函数的使用方法)
2013/10/25 PHP
php中请求url的五种方法总结
2017/07/13 PHP
JavaScript窗口功能指南之在窗口中书写内容
2006/07/21 Javascript
javascript中的有名函数和无名函数
2007/10/17 Javascript
javascript 类定义的4种方法
2009/09/12 Javascript
怎么选择Javascript框架(Javascript Framework)
2013/11/22 Javascript
js 判断图片是否加载完以及实现图片的预下载
2014/08/14 Javascript
javascript同步服务器时间和同步倒计时小技巧
2015/09/24 Javascript
再谈javascript注入 黑客必备!
2016/09/14 Javascript
React如何将组件渲染到指定DOM节点详解
2017/09/08 Javascript
基于vue.js 2.x的虚拟滚动条的示例代码
2018/01/23 Javascript
fullpage.js最后一屏滚动方式
2018/02/06 Javascript
webpack下实现动态引入文件方法
2018/02/22 Javascript
vue中rem的配置的方法示例
2018/08/30 Javascript
Vue官方推荐AJAX组件axios.js使用方法详解与API
2018/10/09 Javascript
vue组件通信传值操作示例
2019/01/08 Javascript
微信小程序导航栏跟随滑动效果的实现代码
2019/05/14 Javascript
微信小程序开发打开另一个小程序的实现方法
2020/05/17 Javascript
详解element-ui 表单校验 Rules 配置 常用黑科技
2020/07/11 Javascript
Python中不同进制的语法及转换方法分析
2016/07/27 Python
python3实现跳一跳点击跳跃
2018/01/08 Python
浅谈python中拼接路径os.path.join斜杠的问题
2018/10/23 Python
Django自带的加密算法及加密模块详解
2019/12/03 Python
浅析border-radius如何兼容IE
2016/04/19 HTML / CSS
业务经理岗位职责
2013/11/11 职场文书
药剂专业自荐信范文
2014/04/16 职场文书
禁毒宣传标语
2014/06/19 职场文书
声乐专业大学生职业生涯规划书:理想的未来需要自己去打造
2014/09/20 职场文书
见习期个人总结
2015/03/05 职场文书
2015年中秋节演讲稿
2015/03/20 职场文书
幼儿园庆元旦主持词
2015/07/06 职场文书
婚宴来宾致辞
2015/07/28 职场文书
python简单验证码识别的实现过程
2021/06/20 Python
mysql实现将字符串字段转为数字排序或比大小
2022/06/14 MySQL