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 相关文章推荐
Java中重定向输出流实现用文件记录程序日志
Jun 12 Python
python list删除元素时要注意的坑点分享
Apr 18 Python
更换Django默认的模板引擎为jinja2的实现方法
May 28 Python
Python subprocess库的使用详解
Oct 26 Python
python 常见字符串与函数的用法详解
Nov 23 Python
python开发之anaconda以及win7下安装gensim的方法
Jul 05 Python
Python使用random模块生成随机数操作实例详解
Sep 17 Python
运行tensorflow python程序,限制对GPU和CPU的占用操作
Feb 06 Python
python 一维二维插值实例
Apr 22 Python
解决Alexnet训练模型在每个epoch中准确率和loss都会一升一降问题
Jun 17 Python
Python map及filter函数使用方法解析
Aug 06 Python
python使用openpyxl库读写Excel表格的方法(增删改查操作)
May 02 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 array_intersect()函数使用代码
2009/01/14 PHP
php与mysql建立连接并执行SQL语句的代码
2011/07/04 PHP
php对二维数组进行排序的简单实例
2013/12/19 PHP
PHP 抽象方法与抽象类abstract关键字介绍及应用
2014/10/16 PHP
Yii核心组件AssetManager原理分析
2014/12/02 PHP
PHP使用pcntl_fork实现多进程下载图片的方法
2014/12/16 PHP
PHP获取数据库表中的数据插入新的表再原删除数据方法
2018/10/12 PHP
使用iframe window的scroll方法控制iframe页面滚动
2014/03/05 Javascript
jquery 隐藏与显示tr标签示例代码
2014/06/06 Javascript
EasyUI实现二级页面的内容勾选的方法
2015/03/01 Javascript
原生js页面滚动延迟加载图片
2015/12/20 Javascript
jQuery使用$.each遍历json数组的简单实现方法
2016/04/18 Javascript
bootstrap中模态框、模态框的属性实例详解
2017/02/17 Javascript
jQuery点击头像上传并预览图片
2017/02/23 Javascript
详解vue父子模版嵌套案例
2017/03/04 Javascript
Js自定义多选框效果的实例代码
2017/07/05 Javascript
浅谈vue父子组件怎么传值
2018/07/21 Javascript
解决vue移动端适配问题
2018/12/12 Javascript
Vue.js组件高级特性实例详解
2018/12/24 Javascript
JavaScript装饰者模式原理与用法实例详解
2020/03/09 Javascript
[04:44]显微镜下的DOTA2第二期——你所没有注意到的细节
2014/06/20 DOTA
[02:33]2014DOTA2 TI每日综述 LGD涉险晋级DK闯入胜者组
2014/07/14 DOTA
[33:15]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VP VS Mineski
2018/03/31 DOTA
Python实现的一个找零钱的小程序代码分享
2014/08/25 Python
Python验证企业工商注册码
2015/10/25 Python
python实现微信防撤回神器
2019/04/29 Python
使用TensorFlow-Slim进行图像分类的实现
2019/12/31 Python
python字典和json.dumps()的遇到的坑分析
2020/03/11 Python
django创建css文件夹的具体方法
2020/07/31 Python
Python如何使用神经网络进行简单文本分类
2021/02/25 Python
50个强大璀璨的CSS3/JS技术运用实例
2010/02/27 HTML / CSS
2014年商场超市庆元旦活动方案
2014/02/14 职场文书
课例研修方案
2014/05/31 职场文书
2014年学习厉行节约反对浪费思想汇报
2014/09/10 职场文书
综合素质自我评价评语
2015/03/06 职场文书
2015年司机工作总结
2015/04/23 职场文书