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中使用中文的方法
Feb 19 Python
在Python中使用第三方模块的教程
Apr 27 Python
python开发之thread实现布朗运动的方法
Nov 11 Python
一键搞定python连接mysql驱动有关问题(windows版本)
Apr 23 Python
Python的包管理器pip更换软件源的方法详解
Jun 20 Python
Python实现FTP弱口令扫描器的方法示例
Jan 31 Python
使用python实现unix2dos和dos2unix命令的例子
Aug 13 Python
使用Python的networkx绘制精美网络图教程
Nov 21 Python
使用matlab 判断两个矩阵是否相等的实例
May 11 Python
详解python命令提示符窗口下如何运行python脚本
Sep 11 Python
python代码实现图书管理系统
Nov 30 Python
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
May 17 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高级OOP技术演示
2009/08/27 PHP
来自phpguru得Php Cache类源码
2010/04/15 PHP
php实现图片以base64显示的方法
2016/10/13 PHP
tp5修改(实现即点即改)
2019/10/18 PHP
完美解决JS中汉字显示乱码问题(已解决)
2006/12/27 Javascript
javascript 关于# 和 void的区别分析
2009/10/26 Javascript
超级有用的13个基于jQuery的内容滚动插件和教程
2011/07/31 Javascript
js中document.getElementByid、document.all和document.layers区分介绍
2011/12/08 Javascript
解决JQeury显示内容没有边距内容紧挨着浏览器边线
2013/12/20 Javascript
js动态添加表格数据使用insertRow和insertCell实现
2014/05/22 Javascript
jQuery使用元素属性attr赋值详解
2015/02/27 Javascript
高性能JavaScript DOM编程(1)
2015/08/11 Javascript
JS实现的最简Table选项卡效果
2015/10/14 Javascript
JavaScript下拉菜单功能实例代码
2017/03/01 Javascript
详解vue2.0 transition 多个元素嵌套使用过渡
2017/06/19 Javascript
VSCode 配置React Native开发环境的方法
2017/12/27 Javascript
JavaScript原型对象、构造函数和实例对象功能与用法详解
2018/08/04 Javascript
微信小程序实现禁止分享代码实例
2019/10/19 Javascript
Vue实现手机扫描二维码预览页面效果
2020/05/28 Javascript
Node.js API详解之 readline模块用法详解
2020/05/22 Javascript
[48:31]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第一场 2月2日
2021/03/11 DOTA
Python去掉字符串中空格的方法
2014/03/11 Python
Python实现批量转换文件编码的方法
2015/07/28 Python
利用python获取Ping结果示例代码
2017/07/06 Python
Python 结巴分词实现关键词抽取分析
2017/10/21 Python
利用Python如何实现数据驱动的接口自动化测试
2018/05/11 Python
python实现对csv文件的列的内容读取
2018/07/04 Python
python实战教程之自动扫雷
2018/07/13 Python
python MultipartEncoder传输zip文件实例
2020/04/07 Python
python requests.get带header
2020/05/05 Python
俄罗斯宠物用品网上商店:ZooMag
2019/12/12 全球购物
Vilebrequin美国官方网上商店:法国豪华泳装品牌
2020/02/22 全球购物
科室工作个人总结的自我评价
2013/10/29 职场文书
GMP办公室主任岗位职责
2014/03/14 职场文书
少年派的奇幻漂流观后感
2015/06/08 职场文书
Mysql 8.x 创建用户以及授予权限的操作记录
2022/04/18 MySQL