Python更新数据库脚本两种方法及对比介绍
最近项目的两次版本迭代中,根据业务需求的变化,需要对数据库进行更新,两次分别使用了不同的方式进行更新。
第一种:使用python的MySQLdb模块利用原生的sql语句进行更新
importMySQLdb #主机名 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__': ifcursor: command_a="updatetables_onesetstatus=5wherestatus=0" #使用execute方法执行SQL语句 cursor.execute(command_a) #提交到数据库执行 db.commit() command2="selectfieldfromtables_onewhereid=12" ret2=cursor.execute(command2) #获取所有记录列表 ret2=cursor.fetchall() foriteminret2: command3="insertintotables_two(name)values(%s);"%(item[0]) fin=cursor.execute(command3) db.commit() #关闭数据库连接 db.close()
数据库查询三种方式
- fetchone():该方法获取下一个查询结果集。结果集是一个对象
- fetchall():接收全部的返回结果行.
- rowcount:这是一个只读属性,并返回执行execute()方法后影响的行数。
第二种:使用python的框架flask和sqlalchemy进行更新
#-*-coding:utf-8-*- fromflaskimportFlask fromflask_sqlalchemyimportSQLAlchemy fromsqlalchemy.sqlimporttext 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) classTable_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''%self.com_name classTable_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' '%self.id defdb_commit_all(lists): try: db.session.add_all(lists) db.session.commit() return'SUCCESS' exceptException,e: return'Fail!!!' defcommits_to_three_judge(): com_sta_obj=Table_one.query.filter_by(com_name='只是测试使用,不用关心表间关系').all() foriteincom_sta_obj: ship_obj=Table_two.query.filter_by(id=ite.id).first() ifship_obj: ifint(ship_obj.status)==2: ite.status=0 printdb_commit_all([ite]) print'表同步结束' 64 if__name__=='__main__': #执行更新数据库函数 commits_to_three_judge()
两种方式对比:
1.在实际项目中,数据库的更新需要用到很多相关函数进行数据的收集,判断是否满足条件等,而这些相关函数在项目中都是用Sqlalchemy进行数据相关操作,比如第二种方法里的db_commit_all()函数
2.使用第二种方法,直接复制这些函数到脚本中即可,如果使用第一种方法,则需要重写相关函数,增加开发时间,浪费精力。
3.如果项目中是使用flask进行开发,推荐使用第二种方法进行数据库更新。
总结
以上所述是小编给大家介绍的Python更新数据库脚本两种方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!