博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Python】python更新数据库脚本两种方法
阅读量:6700 次
发布时间:2019-06-25

本文共 3496 字,大约阅读时间需要 11 分钟。

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

第一种:使用python的MySQLdb模块利用原生的sql语句进行更新

 
1 import MySQLdb 2 #主机名 3 HOST = '127.0.0.1' 4 #用户名 5 USER = "root" 6 #密码 7 PASSWD = "123456" 8 #数据库名 9 DB = "db_name"10 # 打开数据库连接11 db=MySQLdb.connect(HOST,USER,PASSWD,DB)12 # 获取操作游标13 cursor=db.cursor()14 15 if __name__ == '__main__':16 17     if cursor:18         command_a = "update tables_one set status=5 where status=0"19         # 使用execute方法执行SQL语句20         cursor.execute(command_a)21         # 提交到数据库执行22         db.commit()23 24         command2 = "select field from tables_one where id =12"25         ret2 = cursor.execute(command2)26         # 获取所有记录列表27         ret2=cursor.fetchall()28         for item in ret2:29                 command3 = "insert into tables_two(name) values (%s);" % (item[0])30                 fin=cursor.execute(command3)31                 db.commit()32         # 关闭数据库连接33         db.close()
 

数据库查询三种方式

  • fetchone(): 该方法获取下一个查询结果集。结果集是一个对象
  • fetchall():接收全部的返回结果行.
  • rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。

 

第二种:使用python的框架flask和sqlalchemy进行更新

 
1 # -*- coding:utf-8 -*- 2 from flask import Flask 3 from flask_sqlalchemy import SQLAlchemy 4 from sqlalchemy.sql import text 5  6 HOST = '127.0.0.1' 7 USER = "root" 8 PASSWD = "123456" 9 DB = "carrier_test"10 CHARTSET = "utf8"11 12 app = Flask(__name__,instance_relative_config = True)13 #链接数据库路径14 app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://%s:%s@127.0.0.1:3306/%s?charset=%s' %(USER,PASSWD,DB,CHARTSET)15 #如果设置成 True (默认情况),Flask-SQLAlchemy 将会追踪对象的修改并且发送信号。这需要额外的内存, 如果不必要的可以禁用它。16 app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True17 #如果设置成 True,SQLAlchemy 将会记录所有 发到标准输出(stderr)的语句,这对调试很有帮助。18 app.config['SQLALCHEMY_ECHO'] = False19 # 数据库连接池的大小。默认是数据库引擎的默认值 (通常是 5)。20 app.config['SQLALCHEMY_POOL_SIZE'] = 621 db = SQLAlchemy(app)22 23 class Table_one(db.Model):24     __tablename__ = 'table_one'25 26     id = db.Column('id', db.Integer, primary_key=True, autoincrement=True)27     com_name = db.Column('com_name', db.String(30), nullable=False)28     com_about = db.Column('com_about', db.String(200), nullable=False)29 30     def __repr__(self):31         return '
' % self.com_name32 33 34 class Table_two(db.Model):35 __tablename__ = 'table_two'36 37 id = db.Column('id', db.Integer, primary_key=True, autoincrement=True)38 reason = db.Column('reason', db.String(128), nullable=True)39 create_time = db.Column('create_time', db.TIMESTAMP, server_default=text('now()'))40 status = db.Column('status', db.Integer, nullable=False, default=0)41 42 def __repr__(self):43 return '
' % self.id44 45 def db_commit_all(lists):46 try:47 db.session.add_all(lists)48 db.session.commit()49 return 'SUCCESS'50 except Exception,e:51 return 'Fail!!!'52 53 def commits_to_three_judge():54 com_sta_obj = Table_one.query.filter_by(com_name='只是测试使用,不用关心表间关系').all()55 for ite in com_sta_obj:56 ship_obj = Table_two.query.filter_by(id=ite.id).first()57 if ship_obj:58 if int(ship_obj.status) == 2:59 ite.status = 060 print db_commit_all([ite])61 print '表同步结束'62 63 64 65 if __name__=='__main__':66 #执行更新数据库函数67 commits_to_three_judge()

 

两种方式对比:

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

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

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

 

转载地址:http://gogoo.baihongyu.com/

你可能感兴趣的文章
JadClipse eclipse反编译插件
查看>>
struts2中文件上传
查看>>
男性早孕-从软件与程序的区别说起
查看>>
Windows 恢复环境(Windows RE模式)
查看>>
2018-2019 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2018) - 4.28
查看>>
SAP OBYC自动记账的实例说明 +VALUE STRING
查看>>
node.js 实现扫码二维码登录
查看>>
liunx常用命令笔记
查看>>
基础总结
查看>>
oracle-25031安装错误分析解决
查看>>
统一沟通-技巧-5-Lync 2010 for iPhone iPad–配置-手册
查看>>
基于Annotation的输入校验
查看>>
Kinect for windows开发准备
查看>>
SQL Server 2012 官方培训课程体系
查看>>
为什么恍然大悟与知识管理的几个感触:人艰不拆
查看>>
Microsoft Azure Site Recovery (1) 安装服务器代理
查看>>
SCAC连接MicrosoftAzure
查看>>
Vmware view 5.0 POC环境搭建参考v1.0
查看>>
MySQL数据库备份之复制
查看>>
好消息:我最新制作的Java视频教程在51cto网站和Java爱好者们见面了!
查看>>