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的Django框架中的通用视图
May 04 Python
谈谈如何手动释放Python的内存
Dec 17 Python
python 简单的绘图工具turtle使用详解
Jun 21 Python
python+django加载静态网页模板解析
Dec 12 Python
pyspark 读取csv文件创建DataFrame的两种方法
Jun 07 Python
Pycharm设置去除显示的波浪线方法
Oct 28 Python
numpy中的ndarray方法和属性详解
May 27 Python
Flask框架实现的前端RSA加密与后端Python解密功能详解
Aug 13 Python
Tensorflow 模型转换 .pb convert to .lite实例
Feb 12 Python
Python+appium框架原生代码实现App自动化测试详解
Mar 06 Python
使用python-cv2实现视频的分解与合成的示例代码
Oct 26 Python
Python绘制K线图之可视化神器pyecharts的使用
Mar 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获取数据库中数据的实现方法
2017/06/01 PHP
PHP实现读取文件夹及批量重命名文件操作示例
2019/04/15 PHP
页面回到顶部的三种实现(锚标记,js)
2012/10/01 Javascript
鼠标移动到图片名上,显示图片的简单实例
2013/07/14 Javascript
jquery根据name属性查找的小例子
2013/11/21 Javascript
JS实现局部选择打印和局部不选择打印
2014/04/03 Javascript
js调试工具console.log()方法查看js代码的执行情况
2014/08/08 Javascript
JS的location.href跳出框架打开新页面的方法
2014/09/04 Javascript
jQuery表格插件datatables用法详解
2020/11/23 Javascript
JavaScript jquery及AJAX小结
2016/01/24 Javascript
jQuery事件绑定on()与弹窗实现代码
2016/04/28 Javascript
javascript垃圾收集机制的原理分析
2016/12/08 Javascript
jQuery的$.extend 浅拷贝与深拷贝
2017/03/08 Javascript
BootStrap实现文件上传并带有进度条效果
2017/09/11 Javascript
BootstrapTable加载按钮功能实例代码详解
2017/09/22 Javascript
Antd-vue Table组件添加Click事件,实现点击某行数据教程
2020/11/17 Javascript
node.js 基于 STMP 协议和 EWS 协议发送邮件
2021/02/14 Javascript
仅利用30行Python代码来展示X算法
2015/04/01 Python
Python数据类型详解(三)元祖:tuple
2016/05/08 Python
在Python的一段程序中如何使用多次事件循环详解
2017/09/07 Python
100行Python代码实现自动抢火车票(附源码)
2018/01/11 Python
python使用webdriver爬取微信公众号
2018/08/31 Python
python实现公司年会抽奖程序
2019/01/22 Python
Python csv模块使用方法代码实例
2019/08/29 Python
python 实现多维数组转向量
2019/11/30 Python
python代码区分大小写吗
2020/06/17 Python
python 抓取知乎指定回答下视频的方法
2020/07/09 Python
python爬虫工具例举说明
2020/11/30 Python
Currentbody澳大利亚:美容仪专家
2019/11/11 全球购物
荷兰DOD药房中文官网:DeOnlineDrogist
2020/12/27 全球购物
行政专员岗位职责说明书
2014/07/30 职场文书
redis 查看所有的key方式
2021/05/07 Redis
PHP中国际化的字符串排序和比较对象详解
2021/08/23 PHP
Mysql binlog日志文件过大的解决
2021/10/05 MySQL
SpringBoot集成Redis的思路详解
2021/10/16 Redis
微软Win11有哪些隐藏功能? windows11多个功能汇总
2021/11/21 数码科技