ホームページ  >  記事  >  バックエンド開発  >  Python の 2 つのメソッドを使用して実装できるデータベース スクリプトの更新の例

Python の 2 つのメソッドを使用して実装できるデータベース スクリプトの更新の例

黄舟
黄舟オリジナル
2017-07-27 16:01:501549ブラウズ

プロジェクトの最近の 2 つのバージョンの反復では、ビジネス要件の変化に応じてデータベースを更新する必要があり、2 回の更新に異なる方法が使用されました。

最初の方法: 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()

データベースをクエリする 3 つの方法

  • fetchone(): このメソッドは、次のクエリ結果セットを取得します。結果セットはオブジェクトです

  • fetchall():返された結果行をすべて受け取ります。

  • rowcount: これは読み取り専用プロパティであり、execute( ) 方法。

2 番目: 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:%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()

を更新する

2 つの方法の比較:

1.関連機能を多数収録これらの関連関数は、2 番目のメソッドの db_commit_all() 関数など、Sqlalchemy を使用してプロジェクト内のデータ関連の操作を実行します

2。2 番目のメソッドを使用します。これらをコピーするだけです。最初の方法を使用する場合は、関連する関数を書き直す必要があるため、開発時間が長くなり、エネルギーが無駄になります。

3. プロジェクトが flask を使用して開発されている場合は、2 番目の方法を使用してデータベースを更新することをお勧めします。

以上がPython の 2 つのメソッドを使用して実装できるデータベース スクリプトの更新の例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。