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

第一种:使用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'] = True
17 #如果设置成 True,SQLAlchemy 将会记录所有 发到标准输出(stderr)的语句,这对调试很有帮助。
18 app.config['SQLALCHEMY_ECHO'] = False
19 # 数据库连接池的大小。默认是数据库引擎的默认值 (通常是 5)。
20 app.config['SQLALCHEMY_POOL_SIZE'] = 6
21 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 '<table_one com_name %r>' % self.com_name
32
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 '<table_two id %r>' % self.id
44
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 = 0
60 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进行开发,推荐使用第二种方法进行数据库更新。

【Python】python更新数据库脚本两种方法的更多相关文章

  1. python更新数据库脚本两种方法

    最近项目的两次版本迭代中,根据业务需求的变化,需要对数据库进行更新,两次分别使用了不同的方式进行更新. 第一种:使用python的MySQLdb模块利用原生的sql语句进行更新 import MySQ ...

  2. python学习--python 连接SQLServer数据库(两种方法)

    1. python 学习.安装教程参照: http://www.runoob.com/python/python-tutorial.html 2. 集成开发环境 JetBrains PyCharm C ...

  3. python更新数据库脚本三种方法

    最近项目的两次版本迭代中,根据业务需求的变化,需要对数据库进行更新,两次分别使用了不同的方式进行更新. 第一种:使用python的MySQLdb模块利用原生的sql语句进行更新 import MySQ ...

  4. python中执行shell的两种方法总结

    这篇文章主要介绍了python中执行shell的两种方法,有两种方法可以在Python中执行SHELL程序,方法一是使用Python的commands包,方法二则是使用subprocess包,这两个包 ...

  5. python执行linux命令的两种方法

    python执行linux命令有两种方法: 在此以Linux常用的ls命令为例: 方法一:使用os模块 1 2 3 shell# python >> import os >> ...

  6. C++连接mysql数据库的两种方法

    本文主要介绍了C++连接mysql数据库的两种方法,希望通过本文,能对你有所帮助,一起来看. 现在正做一个接口,通过不同的连接字符串操作不同的数据库.要用到mysql数据库,以前没用过这个数据库,用a ...

  7. Python操作MySQL数据库的三种方法

    https://blog.csdn.net/Oscer2016/article/details/70257024 1. MySQLdb 的使用 (1) 什么是MySQLdb?   MySQLdb 是用 ...

  8. Python随机生成验证码的两种方法

    Python随机生成验证码的方法有很多,今天给大家列举两种,大家也可以在这个基础上进行改造,设计出适合自己的验证码方法方法一:利用range Python随机生成验证码的方法有很多,今天给大家列举两种 ...

  9. DataGridView编辑后立即更新到数据库的两种方法

    DataGridView控件是微软预先写好的一个显示数据的控件,功能非常强大,可以显示来自数据库表的数据和XML等其他来源的数据. 方法一:基于DataAdapter对象创建一个CommandBuli ...

随机推荐

  1. 03以太网帧结构(链路层 IEEE802.3)

    OSI七层模型:从底往上记(研究细致时用) 物理层:单位bit,字节byte,同轴电缆,光纤,二进制,比特流 数据链路层:帧,16进制,0-9,A-FMac地址->全网唯一性     mac地址 ...

  2. AtCoder Regular Contest 100 E - Or Plus Max

    一道很好的dp题 dp[K]存的是 i满足二进制1属于K二进制1位置 最大的两个Ai 这样dp[K]统计的两个数肯定满足(i | j) <= K 然后不断做 update(dp[i | (1&l ...

  3. 成都优步uber司机第四组奖励政策

    万能的优步成都团队放出了优步司机第四组,一二三组奖励已经骤降,在月末放出第四组车主档,这是要让一切归于平静的节奏么!!! 滴滴快车单单2.5倍,注册地址:http://www.udache.com/如 ...

  4. React-精华版

    现在最热门的前端框架有AngularJS.React.Bootstrap等.自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件化的开发深深的吸引了我,下面来跟我一起领 ...

  5. php 用continue加数字实现foreach 嵌套循环中止

    foreach($array as $key => $value) { if($value == 5)break; } // 这是一种. // 如果是嵌套的循环,用continue加数字也可以实 ...

  6. hdu2553N皇后问题(dfs,八皇后)

    N皇后问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  7. VS2015 更改C++模式

    亲爱的小伙伴,有没有发现你们的VS2015装完以后和老江湖们用的不一样了,人家的界面打开是这样的 而你的界面打开是这样的 虽然看是只有一左一右的区别,但是内在确实有好多不一样. 想不想想老江湖一样,拥 ...

  8. 第5章 Linux网络编程基础

    第5章 Linux网络编程基础 5.1 socket地址与API 一.理解字节序 主机字节序一般为小端字节序.网络字节序一般为大端字节序.当格式化的数据在两台使用了不同字节序的主机之间直接传递时,接收 ...

  9. vue移动音乐app开发学习(二):页面骨架的开发

    本系列文章是为了记录学习中的知识点,便于后期自己观看.如果有需要的同学请登录慕课网,找到Vue 2.0 高级实战-开发移动端音乐WebApp进行观看,传送门. 完成后的页面状态以及项目结构如下: 一: ...

  10. wwnjld第二轮迭代测试报告

    1.引言 1.1测试报告目的 被测试报告为wwnjld小组我们的时间管理软件的第二轮迭代所写的软件测试报告.在经过本小组大家不懈的努力之下,我们小组第二轮迭代的产品终于新鲜出炉了.这次测试小组的主要成 ...