>  기사  >  백엔드 개발  >  Python에서 두 가지 방법을 사용하여 구현할 수 있는 데이터베이스 스크립트 업데이트의 예

Python에서 두 가지 방법을 사용하여 구현할 수 있는 데이터베이스 스크립트 업데이트의 예

黄舟
黄舟원래의
2017-07-27 16:01:501531검색

최근 두 번의 프로젝트 반복에서는 비즈니스 요구 사항의 변화에 ​​따라 데이터베이스를 업데이트해야 했고, 업데이트에 서로 다른 방법이 두 번 사용되었습니다.

첫 번째: 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: 이것은 읽기 전용 속성이며 실행( ) 방법.

두 번째: Python 프레임워크 플라스크와 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:%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)

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 &#39;<table_one com_name %r>&#39; % self.com_name


class Table_two(db.Model):
    __tablename__ = &#39;table_two&#39;

    id = db.Column(&#39;id&#39;, db.Integer, primary_key=True, autoincrement=True)
    reason = db.Column(&#39;reason&#39;, db.String(128), nullable=True)
    create_time = db.Column(&#39;create_time&#39;, db.TIMESTAMP, server_default=text(&#39;now()&#39;))
    status = db.Column(&#39;status&#39;, db.Integer, nullable=False, default=0)

    def __repr__(self):
        return &#39;<table_two id %r>&#39; % self.id

def db_commit_all(lists):
    try:
        db.session.add_all(lists)
        db.session.commit()
        return &#39;SUCCESS&#39;
    except Exception,e:
        return &#39;Fail!!!&#39;

def commits_to_three_judge():
    com_sta_obj = Table_one.query.filter_by(com_name=&#39;只是测试使用,不用关心表间关系&#39;).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 &#39;表同步结束&#39;

64 
if __name__==&#39;__main__&#39;:
    #执行更新数据库函数
    commits_to_three_judge()

두 가지 방법 비교:

1. 관련 기능이 많이 수집됩니다. 데이터, 조건 충족 여부 등을 결정하며 이러한 관련 함수는 Sqlalchemy를 사용하여 두 번째 방법의 db_commit_all() 함수와 같이 프로젝트에서 데이터 관련 작업을 수행합니다

2. 두 번째 방법을 사용하면 이를 복사하면 됩니다. 첫 번째 방법을 사용하는 경우 관련 함수를 다시 작성해야 하므로 개발 시간이 늘어나고 에너지가 낭비됩니다.

3. 플라스크를 사용하여 프로젝트를 개발하는 경우 두 번째 방법을 사용하여 데이터베이스를 업데이트하는 것이 좋습니다.

위 내용은 Python에서 두 가지 방법을 사용하여 구현할 수 있는 데이터베이스 스크립트 업데이트의 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.