Heim  >  Artikel  >  Backend-Entwicklung  >  Beispiele für die Aktualisierung von Datenbankskripten, die mit zwei Methoden in Python implementiert werden können

Beispiele für die Aktualisierung von Datenbankskripten, die mit zwei Methoden in Python implementiert werden können

黄舟
黄舟Original
2017-07-27 16:01:501531Durchsuche

In den beiden letzten Versionsiterationen des Projekts musste die Datenbank basierend auf Änderungen der Geschäftsanforderungen aktualisiert werden, und für die Aktualisierungen wurden zweimal unterschiedliche Methoden verwendet.

Die erste Methode: Verwenden Sie das MySQLdb-Modul von Python, um mit nativen SQL-Anweisungen zu aktualisieren

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()

Drei Möglichkeiten, die Datenbank abzufragen

  • fetchone(): Diese Methode ruft den nächsten Abfrageergebnissatz ab. Die Ergebnismenge ist ein Objekt

  • fetchall():Erhält alle zurückgegebenen Ergebniszeilen.

  • rowcount : Dies ist eine schreibgeschützte Eigenschaft und gibt die Anzahl der betroffenen Zeilen zurück, nachdem die Methodeexecute() ausgeführt wurde.

Zweitens: Verwenden Sie Pythons Framework flask und sqlalchemy, um

# -*- 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()

Vergleich zweier Methoden:

1. In tatsächlichen Projekten erfordert die Aktualisierung der Datenbank die Verwendung vieler verwandter Funktionen, um Daten zu sammeln und festzustellen, ob die Bedingungen erfüllt sind usw ., und diese verwandten Funktionen verwenden Sqlalchemy für datenbezogene Vorgänge im Projekt, wie z. B. die Funktion db_commit_all() in der zweiten Methode

2 Verwenden Sie die zweite Methode, um diese Funktionen direkt in das Skript zu kopieren. Das ist es Wenn Sie die erste Methode verwenden, müssen Sie die relevanten Funktionen neu schreiben, was die Entwicklungszeit verlängert und Energie verschwendet.

3. Wenn das Projekt mit Flask entwickelt wird, wird empfohlen, die zweite Methode zum Aktualisieren der Datenbank zu verwenden.

Das obige ist der detaillierte Inhalt vonBeispiele für die Aktualisierung von Datenbankskripten, die mit zwei Methoden in Python implementiert werden können. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn