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字典多条件排序方法实例
Jun 30 Python
python爬虫常用的模块分析
Aug 29 Python
一波神奇的Python语句、函数与方法的使用技巧总结
Dec 08 Python
Python中的__slots__示例详解
Jul 06 Python
Python双精度浮点数运算并分行显示操作示例
Jul 21 Python
Python小游戏之300行代码实现俄罗斯方块
Jan 04 Python
Python参数解析模块sys、getopt、argparse使用与对比分析
Apr 02 Python
Python3.5常见内置方法参数用法实例详解
Apr 29 Python
django xadmin 管理器常用显示设置方式
Mar 11 Python
python dir函数快速掌握用法技巧
Dec 09 Python
Python基础之字符串格式化详解
Apr 21 Python
你需要掌握的20个Python常用技巧
Feb 28 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中设置时区,记录日志文件的实现代码
2013/01/07 PHP
PHP面向对象教程之自定义类
2014/06/10 PHP
CI(CodeIgniter)框架中的增删改查操作
2014/06/10 PHP
php生成唯一数字id的方法汇总
2015/11/18 PHP
php实现头像上传预览功能
2017/04/27 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
PHP大文件切割上传并带进度条功能示例
2019/07/01 PHP
新手入门常用代码集锦
2007/01/11 Javascript
jQuery插件 tabBox实现代码
2010/02/09 Javascript
jquery和ajax的关系详细介绍
2013/11/29 Javascript
js调试系列 控制台命令行API使用方法
2014/06/18 Javascript
轻松学习jQuery插件EasyUI EasyUI创建菜单与按钮
2015/11/30 Javascript
解决Window10系统下Node安装报错的问题分析
2016/12/13 Javascript
详解vue.js之props传递参数
2017/12/12 Javascript
js实现复制功能(多种方法集合)
2018/01/06 Javascript
Vue 菜单栏点击切换单个class(高亮)的方法
2018/08/22 Javascript
vue中选项卡点击切换且能滑动切换功能的实现代码
2018/11/25 Javascript
关于js陀螺仪的理解分析
2019/04/11 Javascript
Vue使用vue-recoure + http-proxy-middleware + vuex配合promise实现基本的跨域请求封装
2019/10/21 Javascript
javascript实现简易的计算器
2020/01/17 Javascript
js实现无缝轮播图特效
2020/05/09 Javascript
五句话帮你轻松搞定js原型链
2020/12/09 Javascript
[02:44]DOTA2英雄基础教程 克林克兹
2014/01/15 DOTA
python去除所有html标签的方法
2015/05/05 Python
Python聚类算法之凝聚层次聚类实例分析
2015/11/20 Python
浅谈Python中range和xrange的区别
2017/12/20 Python
pandas pivot_table() 按日期分多列数据的方法
2018/11/16 Python
对Python生成汉字字库文字,以及转换为文字图片的实例详解
2019/01/29 Python
将matplotlib绘图嵌入pyqt的方法示例
2020/01/08 Python
Python HTMLTestRunner可视化报告实现过程解析
2020/04/10 Python
个人简历自我鉴定
2013/10/11 职场文书
怎样写好自我鉴定
2013/12/04 职场文书
个人自荐信
2013/12/05 职场文书
租赁协议书范本
2014/04/22 职场文书
2015年护理工作总结范文
2015/04/03 职场文书
MySQL索引是啥?不懂就问
2021/07/21 MySQL