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 09 Python
教你用一行Python代码实现并行任务(附代码)
Feb 02 Python
python实现m3u8格式转换为mp4视频格式
Feb 28 Python
Python Series从0开始索引的方法
Nov 06 Python
python 遍历列表提取下标和值的实例
Dec 25 Python
Python将json文件写入ES数据库的方法
Apr 10 Python
Python替换月份为英文缩写的实现方法
Jul 15 Python
python实现word文档批量转成自定义格式的excel文档的思路及实例代码
Feb 21 Python
解决python -m pip install --upgrade pip 升级不成功问题
Mar 05 Python
Python 解决相对路径问题:&quot;No such file or directory&quot;
Jun 05 Python
Python面向对象实现方法总结
Aug 12 Python
在Django中使用MQTT的方法
May 10 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_walk() 数组函数
2011/07/12 PHP
php中JSON的使用方法
2015/04/30 PHP
你应该知道PHP浮点数知识
2015/05/13 PHP
php基于curl实现随机ip地址抓取内容的方法
2016/10/11 PHP
PHP数组操作实例分析【添加,删除,计算,反转,排序,查找等】
2016/12/24 PHP
PHP实现随机数字、字母的验证码功能
2018/08/01 PHP
php链式操作的实现方式分析
2019/08/12 PHP
深入认识javascript中的eval函数
2009/11/02 Javascript
模仿JQuery sortable效果 代码有错但值得看看
2009/11/05 Javascript
jQuery1.6 使用方法二
2011/11/23 Javascript
自己实现string的substring方法 人民币小写转大写,数字反转,正则优化
2012/09/02 Javascript
js使用html()或text()方法获取设置p标签的显示的值
2014/08/01 Javascript
JS实现文字放大效果的方法
2015/03/03 Javascript
jquery实现的判断倒计时是否结束代码
2016/02/05 Javascript
jQuery mobile的header和footer在点击屏幕的时候消失的解决办法
2016/07/01 Javascript
vue.js 1.x与2.0中js实时监听input值的变化
2017/03/15 Javascript
js 监控iframe URL的变化实例代码
2017/07/12 Javascript
JavaScript 自定义事件之我见
2017/09/25 Javascript
react-native使用leanclound消息推送的方法
2018/08/06 Javascript
Vue实现星级评价效果实例详解
2019/12/30 Javascript
从零学Python之引用和类属性的初步理解
2014/05/15 Python
Python3基础之list列表实例解析
2014/08/13 Python
python实现图像识别功能
2018/01/29 Python
python数字图像处理之骨架提取与分水岭算法
2018/04/27 Python
python中pika模块问题的深入探究
2018/10/13 Python
介绍一款python类型检查工具pyright(推荐)
2019/07/03 Python
简单了解python关系(比较)运算符
2019/07/08 Python
python递归调用中的坑:打印有值, 返回却None
2020/03/16 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
2021/01/27 Python
购买英国原创艺术:Art Gallery
2018/08/25 全球购物
北体毕业生求职信
2014/02/28 职场文书
竞选劳动委员演讲稿
2014/04/28 职场文书
2015元旦联欢晚会结束语
2014/12/14 职场文书
学校捐款活动总结
2015/05/09 职场文书
学生会部长竞选稿
2015/11/19 职场文书
python 中的jieba分词库
2021/11/23 Python