Python 데이터베이스 스 크 립 트 업데이트 두 가지 방법 및 비교 소개

최근 프로젝트 의 두 번 째 버 전 교체 에 서 는 업무 수요 의 변화 에 따라 데이터 베 이 스 를 업데이트 해 야 하 며,두 번 은 각각 다른 방식 으로 업 데 이 트 를 진행 했다.
첫 번 째:python 의 MySQL db 모듈 을 사용 하여 원생 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 Flask
    from flask_sqlalchemy import SQLAlchemy
    from sqlalchemy.sql import text
    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:%[email protected]: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)
    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_name
    class 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.id
    def 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 로 데이터 관련 작업 을 한다.예 를 들 어 두 번 째 방법 중의 dbcommit_all()함수
    2.두 번 째 방법 을 사용 하여 이 함 수 를 스 크 립 트 에 직접 복사 하면 됩 니 다.첫 번 째 방법 을 사용 하면 관련 함 수 를 다시 쓰 고 개발 시간 을 늘 리 며 정력 을 낭비 해 야 합 니 다.
    3.프로젝트 에서 fllask 를 사용 하여 개발 하 는 경우 두 번 째 방법 으로 데이터 베 이 스 를 업데이트 하 는 것 을 추천 합 니 다.
    총결산
    위 에서 말 한 것 은 소 편 이 여러분 에 게 소개 한 Python 데이터베이스 스 크 립 트 를 업데이트 하 는 두 가지 방법 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

    좋은 웹페이지 즐겨찾기