国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python更新數據庫腳本兩種方法及對比介紹

2020-01-04 17:05:05
字體:
來源:轉載
供稿:網友

最近項目的兩次版本迭代中,根據業務需求的變化,需要對數據庫進行更新,兩次分別使用了不同的方式進行更新。

第一種:使用python/199470.html">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 Flaskfrom flask_sqlalchemy import SQLAlchemyfrom sqlalchemy.sql import textHOST = '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'] = 6db = 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_nameclass 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.iddef 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 '表同步結束'64 if __name__=='__main__':  #執行更新數據庫函數  commits_to_three_judge()

兩種方式對比:

1.在實際項目中,數據庫的更新 需要用到很多相關函數進行數據的收集,判斷是否滿足條件等,而這些相關函數在項目中都是用 Sqlalchemy進行數據相關操作,比如第二種方法里的db_commit_all()函數

2.使用第二種方法,直接復制這些函數到腳本中即可,如果使用第一種方法,則需要重寫相關函數,增加開發時間,浪費精力。

3.如果項目中是使用flask進行開發,推薦使用第二種方法進行數據庫更新。

總結

以上所述是小編給大家介紹的Python更新數據庫腳本兩種方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长子县| 伽师县| 安图县| 迭部县| 玉山县| 阿尔山市| 屯昌县| 伊春市| 阳春市| 温宿县| 瑞安市| 绍兴县| 张家港市| 修武县| 林州市| 西安市| 灵山县| 新河县| 措勤县| 永兴县| 勃利县| 柘城县| 灵石县| 弥勒县| 沽源县| 阿尔山市| 郑州市| 长丰县| 哈巴河县| 南和县| 关岭| 同仁县| 麦盖提县| 衡南县| 通海县| 肥城市| 萨迦县| 本溪| 平泉县| 京山县| 望城县|