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算法学习之基数排序实例
Dec 18 Python
python创建和删除目录的方法
Apr 29 Python
深入解析Python中的list列表及其切片和迭代操作
Mar 13 Python
简单掌握Python中glob模块查找文件路径的用法
Jul 05 Python
如何将python中的List转化成dictionary
Aug 15 Python
Python-ElasticSearch搜索查询的讲解
Feb 25 Python
python 将字符串完成特定的向右移动方法
Jun 11 Python
wxPython实现分隔窗口
Nov 19 Python
运行tensorflow python程序,限制对GPU和CPU的占用操作
Feb 06 Python
python图形开发GUI库pyqt5的详细使用方法及各控件的属性与方法
Feb 14 Python
Python对象的属性访问过程详解
Mar 05 Python
Python实现迪杰斯特拉算法过程解析
Sep 18 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/02 无线电
php中base64_decode与base64_encode加密解密函数实例
2014/11/24 PHP
PHP、Java des加密解密实例
2015/04/27 PHP
php简单实现多语言切换的方法
2016/05/09 PHP
PHP分享图片的生成方法
2018/04/25 PHP
JavaScript学习笔记(十七)js 优化
2010/02/04 Javascript
jQuery学习笔记(4)--Jquery中获取table中某列值的具体思路
2013/04/10 Javascript
Javascript中判断变量是数组还是对象(array还是object)
2013/08/14 Javascript
使用HTML5+Boostrap打造简单的音乐播放器
2016/08/05 Javascript
浅谈Angular4实现热加载开发旅程
2017/09/08 Javascript
ES6中Array.copyWithin()函数的用法实例详解
2017/09/16 Javascript
浅谈在Vue-cli里基于axios封装复用请求
2017/11/06 Javascript
Webpack实战加载SVG的方法
2017/12/26 Javascript
JS数组去重的6种方法完整实例
2018/12/08 Javascript
JS字符串与二进制的相互转化实例代码详解
2019/06/28 Javascript
element-ui 实现响应式导航栏的示例代码
2020/05/08 Javascript
[05:14]辉夜杯主赛事第二日 RECAP精彩回顾
2015/12/27 DOTA
HTML中使用python屏蔽一些基本功能的方法
2017/07/07 Python
使用Python刷淘宝喵币(低阶入门版)
2019/10/30 Python
Electrolux伊莱克斯巴西商店:家用电器、小家电和配件
2018/05/23 全球购物
Antler英国官网:购买安特丽行李箱、拉杆箱
2019/08/25 全球购物
计算机专业应届毕业生自荐信
2013/09/26 职场文书
实习生个人找工作的自我评价
2013/10/30 职场文书
技术总监管理职责范本
2014/03/06 职场文书
《大自然的语言》教学反思
2014/04/08 职场文书
学校宣传标语
2014/06/18 职场文书
商务经理岗位职责
2014/08/03 职场文书
护士医德医风自我评价
2014/09/15 职场文书
再婚婚前财产协议书范本
2014/10/19 职场文书
个人年终总结开头
2015/03/06 职场文书
电影雷锋观后感
2015/06/10 职场文书
《小蝌蚪找妈妈》教学反思
2016/02/23 职场文书
2016年社区文体活动总结
2016/04/06 职场文书
《妈妈别哭,有我在》读后感3篇
2020/01/13 职场文书
pytest配置文件pytest.ini的详细使用
2021/04/17 Python
服务器SVN搭建图文安装过程
2022/06/21 Servers