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改变日志(logging)存放位置的示例
Mar 27 Python
使用IronPython把Python脚本集成到.NET程序中的教程
Mar 31 Python
实现python版本的按任意键继续/退出
Sep 26 Python
Python给你的头像加上圣诞帽
Jan 04 Python
Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容
Feb 23 Python
Jupyter notebook远程访问服务器的方法
May 24 Python
对Python 3.2 迭代器的next函数实例讲解
Oct 18 Python
python模拟菜刀反弹shell绕过限制【推荐】
Jun 25 Python
Python partial函数原理及用法解析
Dec 11 Python
简单了解django文件下载方式
Feb 10 Python
关于Python Tkinter Button控件command传参问题的解决方式
Mar 04 Python
python查询MySQL将数据写入Excel
Oct 29 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创建和删除目录函数介绍和递归删除目录函数分享
2014/11/18 PHP
利用PHP生成静态html页面的原理
2016/09/30 PHP
PHP获取php,mysql,apche的版本信息及更多服务器信息
2021/03/09 PHP
使用onbeforeunload属性后的副作用
2007/03/08 Javascript
JavaScript中的字符串操作详解
2013/11/12 Javascript
AngularJS页面带参跳转及参数解析操作示例
2017/06/28 Javascript
原生JavaScript实现Ajax异步请求
2017/11/19 Javascript
jQuery实现的淡入淡出图片轮播效果示例
2018/08/29 jQuery
axios 封装上传文件的请求方法
2018/09/26 Javascript
Javascript的this详解
2019/03/23 Javascript
微信小程序之几种常见的弹框提示信息实现详解
2019/07/11 Javascript
Python的多态性实例分析
2015/07/07 Python
Python的Django框架中自定义模版标签的示例
2015/07/20 Python
Python自动化测试ConfigParser模块读写配置文件
2016/08/15 Python
Python使用回溯法子集树模板解决爬楼梯问题示例
2017/09/08 Python
Python_查看sqlite3表结构,查询语句的示例代码
2019/07/17 Python
深入了解Django中间件及其方法
2019/07/26 Python
Python中Flask-RESTful编写API接口(小白入门)
2019/12/11 Python
python实现快递价格查询系统
2020/03/03 Python
python matplotlib工具栏源码探析三之添加、删除自定义工具项的案例详解
2021/02/25 Python
HTML5 3D衣服摇摆动画特效
2016/03/17 HTML / CSS
过滤器的用法
2013/10/08 面试题
员工自我鉴定范文
2013/10/06 职场文书
银行实习的自我鉴定
2013/12/10 职场文书
最新的咖啡店创业计划书
2013/12/30 职场文书
小学安全教育月活动总结
2014/07/07 职场文书
公司员工活动策划方案
2014/08/20 职场文书
民政局副局长民主生活会个人对照检查材料
2014/09/19 职场文书
乡镇务虚会发言材料
2014/10/20 职场文书
2015年党员创先争优承诺书
2015/01/22 职场文书
工程部岗位职责
2015/02/10 职场文书
创先争优活动个人总结
2015/03/04 职场文书
原告代理词范文
2015/05/25 职场文书
教师远程培训心得体会
2016/01/09 职场文书
2016先进集体事迹材料范文
2016/02/25 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers