视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
python中可以使用两种方法实现更新数据库脚本的示例
2020-11-27 14:23:24 责编:小采
文档


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

第一种:使用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 '表同步结束' if __name__=='__main__': #执行更新数据库函数 commits_to_three_judge()

    两种方式对比:

    1.在实际项目中,数据库的更新 需要用到很多相关函数进行数据的收集,判断是否满足条件等,而这些相关函数在项目中都是用 Sqlalchemy进行数据相关操作,比如第二种方法里的db_commit_all()函数

    2.使用第二种方法,直接复制这些函数到脚本中即可,如果使用第一种方法,则需要重写相关函数,增加开发时间,浪费精力。

    3.如果项目中是使用flask进行开发,推荐使用第二种方法进行数据库更新。

    下载本文
    显示全文
    专题