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

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

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

1 import2 #主机名

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 ifcursor: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 inret2: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 importFlask3 from flask_sqlalchemy importSQLAlchemy4 from sqlalchemy.sql importtext5

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'] = 6

21 db =SQLAlchemy(app)22

23 classTable_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 classTable_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 defdb_commit_all(lists):46 try:47 db.session.add_all(lists)48 db.session.commit()49 return 'SUCCESS'

50 exceptException,e:51 return 'Fail!!!'

52

53 defcommits_to_three_judge():54 com_sta_obj = Table_one.query.filter_by(com_name='只是测试使用,不用关心表间关系').all()55 for ite incom_sta_obj:56 ship_obj = Table_two.query.filter_by(id=ite.id).first()57 ifship_obj:58 if int(ship_obj.status) == 2:59 ite.status =060 printdb_commit_all([ite])61 print '表同步结束'

62

63 64

65 if __name__=='__main__':66 #执行更新数据库函数

67 commits_to_three_judge()

第三种:使用python的框架flask的app_context()方法编写离线脚本

importosimportsys#防止路径出错

sys.path.insert(

0,

os.path.abspath(

os.path.dirname(

os.path.dirname(os.path.abspath(__file__))

)

)

)#本项目的DB

from ext importDB#本项目的app

from fws importapp#本项目的model

from fws.models.share importSharedefupdate_sql():

share_obj=Share()

share_obj.modify_time= 'dfdf'DB.session.add(share_obj)

DB.session.commit()if __name__ == '__main__':#直接使用app_context()方法,其中包含了配置信息等等,不用复制 model类,连接数据库等

with app.app_context():

update_sql()

三种方式对比:

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

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

3.第三种方法是最方便的方法,对于连接数据库的配置以及model等直接使用项目中的相关包,只要添加  with app.app_context() 极大的减少开发时间。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值