プロジェクトの最近の 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 '<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()
を更新する
2 つの方法の比較:
1.関連機能を多数収録これらの関連関数は、2 番目のメソッドの db_commit_all() 関数など、Sqlalchemy を使用してプロジェクト内のデータ関連の操作を実行します
2。2 番目のメソッドを使用します。これらをコピーするだけです。最初の方法を使用する場合は、関連する関数を書き直す必要があるため、開発時間が長くなり、エネルギーが無駄になります。
3. プロジェクトが flask を使用して開発されている場合は、2 番目の方法を使用してデータベースを更新することをお勧めします。
以上がPython の 2 つのメソッドを使用して実装できるデータベース スクリプトの更新の例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。