首页 > 编程 > Python > 正文

Python更新数据库脚本两种方法及对比介绍

2020-01-04 17:05:05
字体:
来源:转载
供稿:网友

最近项目的两次版本迭代中,根据业务需求的变化,需要对数据库进行更新,两次分别使用了不同的方式进行更新。

第一种:使用python/199470.html">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 Flaskfrom flask_sqlalchemy import SQLAlchemyfrom sqlalchemy.sql import textHOST = '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'] = 6db = 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_nameclass 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.iddef 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更新数据库脚本两种方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对VEVB武林网网站的支持!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表