Maison >développement back-end >Tutoriel Python >Exemples de scripts de mise à jour de base de données pouvant être implémentés à l'aide de deux méthodes en python
Dans les deux versions récentes du projet, la base de données devait être mise à jour en fonction de l'évolution des exigences commerciales, et différentes méthodes ont été utilisées à deux reprises pour les mises à jour.
La première méthode : utilisez le module MySQLdb de Python pour mettre à jour à l'aide d'instructions SQL natives
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()
Trois façons d'interroger la base de données
fetchone() : Cette méthode obtient le jeu de résultats de requête suivant. L'ensemble de résultats est un objet
fetchall() :Reçoit toutes les lignes de résultats renvoyées.
rowcount : Il s'agit d'une propriété en lecture seule et renvoie le nombre de lignes affectées après l'exécution de la méthode execute().
Deuxième : utilisez le framework flask et sqlalchemy de Python pour mettre à jour
# -*- 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()
Comparaison de deux méthodes :
1. Dans les projets réels, la mise à jour de la base de données nécessite l'utilisation de nombreuses fonctions associées pour collecter des données et déterminer si les conditions sont remplies, etc. ., et ces fonctions associées utilisent Sqlalchemy pour les opérations liées aux données dans le projet, comme la fonction db_commit_all() dans la deuxième méthode
2 Utilisez la deuxième méthode pour copier directement ces fonctions dans le script. . Si vous utilisez la première méthode, vous devez réécrire les fonctions concernées, ce qui augmente le temps de développement et gaspille de l'énergie.
3. Si le projet est développé en utilisant flask, il est recommandé d'utiliser la deuxième méthode pour mettre à jour la base de données.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!