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命令行参数解析模块getopt使用实例
Apr 13 Python
Python中利用原始套接字进行网络编程的示例
May 04 Python
利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例
Aug 08 Python
Python全局锁中如何合理运用多线程(多进程)
Nov 06 Python
python获取引用对象的个数方式
Dec 20 Python
python模式 工厂模式原理及实例详解
Feb 11 Python
Django分组聚合查询实例分享
Apr 29 Python
python 实现两个线程交替执行
May 02 Python
Expected conditions模块使用方法汇总代码解析
Aug 13 Python
pandas按条件筛选数据的实现
Feb 20 Python
python字符串拼接.join()和拆分.split()详解
Nov 23 Python
Python实战之大鱼吃小鱼游戏的实现
Apr 01 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
SMARTY学习手记
2007/01/04 PHP
微信支付开发教程(一)微信支付URL配置
2014/05/28 PHP
PHP的Socket网络编程入门指引
2015/08/11 PHP
jQuery html()等方法介绍
2009/11/18 Javascript
javascript 获取模态窗口的滚动位置代码
2013/08/06 Javascript
JS Loading功能的简单实现
2013/11/29 Javascript
使用JS实现jQuery的addClass, removeClass, hasClass函数功能
2014/10/31 Javascript
js闭包实例汇总
2014/11/09 Javascript
jquery中object对象循环遍历的方法
2015/12/18 Javascript
全面解析JavaScript中apply和call以及bind(推荐)
2016/06/15 Javascript
JavaScript 链式结构序列化详解
2016/09/30 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
2017/08/31 Javascript
360提示[高危]使用存在漏洞的JQuery版本的解决方法
2017/10/27 jQuery
vue-cli监听组件加载完成的方法
2018/09/07 Javascript
详解Eslint 配置及规则说明
2018/09/10 Javascript
[01:03:47]VP vs NewBee Supermajor 胜者组 BO3 第一场 6.5
2018/06/06 DOTA
Python求两个list的差集、交集与并集的方法
2014/11/01 Python
Python进阶学习之特殊方法实例详析
2017/12/01 Python
python中的set实现不重复的排序原理
2018/01/24 Python
Python中分支语句与循环语句实例详解
2018/09/13 Python
Django 缓存配置Redis使用详解
2019/07/23 Python
简单瞅瞅Python vars()内置函数的实现
2019/09/27 Python
详解Python可视化神器Yellowbrick使用
2019/11/11 Python
Python字典中的值为列表或字典的构造实例
2019/12/16 Python
python3的UnicodeDecodeError解决方法
2019/12/20 Python
Python进程的通信Queue、Pipe实例分析
2020/03/30 Python
python随机模块random的22种函数(小结)
2020/05/15 Python
python小技巧——将变量保存在本地及读取
2020/11/13 Python
美国指甲油品牌:Deco Miami
2017/01/30 全球购物
房屋财产继承协议书范本
2014/11/03 职场文书
电影地道战观后感
2015/06/04 职场文书
安全教育的主题班会
2015/08/13 职场文书
解决golang结构体tag编译错误的问题
2021/05/02 Golang
关于nginx 实现jira反向代理的问题
2021/09/25 Servers
Spring-cloud Config Server的3种配置方式
2021/09/25 Java/Android
python 使用pandas读取csv文件的方法
2022/12/24 Python