flaskベースのリアルタイム更新データベースプロジェクト

19942 ワード

引用する
メンタープロジェクトを行う過程で、リアルタイムシミュレーション実験を完了するためにリアルタイムで更新されたデータベースが必要です.しかし、工場側のデータベースは急に使いにくくなり、使いやすくても本人が関わっている工業プロジェクトは夜中に着工するのが普通で、使いやすくても夜明けに実験室でプロジェクトをすることはできません.の怒ったら、自分でリアルタイムで更新したデータベースをシミュレートしましょう.
前期の仕事
私は最近ずっとflaskでプロジェクトをしていて、ちょうどSQLAlchemyでデータベースを操作することを学んで、それではちょうど熱いうちに鉄を打って、直接flaskを持って一定の時間ごとにデータベースにデータを挿入するプロジェクトをしましょう.
  • プロジェクト環境:Pycharm+Python 3.5+flask v 1.0.2+mariadb(mysqlでもOK)+Navicat(データベースの可視化、データベースの操作が容易)+csv形式のデータファイル
  • ここでcsvファイルは6列あり、左から右にcurrent_A,current_B,current_C,action_A,action_B,action_C,共3601行(工業データは秘密にしているため、外に漏らすことができない)、csvファイルの役割は中のデータを1本1本データベースに挿入し、実際の工業のリアルタイム生産過程をシミュレートすることである.
  • Navicatでreal_という名前のdatabaseを新規作成time_db、私のデータベースのユーザー名はrootで、パスワードは123456で、ローカルipは127.0.0.1で、そこで、データベースを構成する文は:
  • #        
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:[email protected]/real_time_db'
    #         ,   False
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    

    pymysqlサードパーティライブラリをインポートする必要があることに注意してください.
  • Navicatにテーブル構造をインポートします.テーブル名はfur_です.data:
  • SET FOREIGN_KEY_CHECKS=0;
    
    -- ----------------------------
    -- Table structure for fur_data
    -- ----------------------------
    DROP TABLE IF EXISTS `fur_data`;
    CREATE TABLE `fur_data` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `current_A` float DEFAULT NULL,
      `current_B` float DEFAULT NULL,
      `current_C` float DEFAULT NULL,
      `action_A` float DEFAULT NULL,
      `action_B` float DEFAULT NULL,
      `action_C` float DEFAULT NULL,
      `d_time` datetime DEFAULT NULL COMMENT '      ',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2906 DEFAULT CHARSET=latin1;
    

    データを挿入するには、次の文を使用します.
    --      
    INSERT INTO `fur_data` VALUES ('1', '20000.0', '20000.0', '20000.0', '0.0', '0.0', '0.0', '2019-6-16 00:00:00');
    

    完全なコード
    すべてのコードは次のとおりです.
    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    import time
    import csv
    import pymysql
    pymysql.install_as_MySQLdb()
    
    app = Flask(__name__)
    
    #        
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:[email protected]/real_time_db'
    #         ,   False
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    
    db = SQLAlchemy(app)
    
    #          
    class Fur(db.Model):
        __tablename__ = 'fur_data'#     
    
        id = db.Column(db.Integer, primary_key=True)
        current_A = db.Column(db.Float, nullable=False)
        current_B = db.Column(db.Float, nullable=False)
        current_C = db.Column(db.Float, nullable=False)
        action_A = db.Column(db.Float, nullable=False)
        action_B = db.Column(db.Float, nullable=False)
        action_C = db.Column(db.Float, nullable=False)
        d_time = db.Column(db.DateTime, nullable=False)
    
    #    ,   
    #    
     db.drop_all()
    #    
     db.create_all()
    
    reader = csv.reader(open('FMF_data.csv'))
    # A,B,C      list   
    current_A_list = []
    current_B_list = []
    current_C_list = []
    action_A_list = []
    action_B_list = []
    action_C_list = []
    
    for list in reader:
        current_A_list.append(list[0])
        current_B_list.append(list[1])
        current_C_list.append(list[2])
        action_A_list.append(list[3])
        action_B_list.append(list[4])
        action_C_list.append(list[5])
    
    len = len(current_A_list)
    i = 0
    
    #           
    while True:
        time.sleep(1)
        current_A = current_A_list[i]
        current_B = current_B_list[i]
        current_C = current_C_list[i]
        action_A = action_A_list[i]
        action_B = action_B_list[i]
        action_C = action_C_list[i]
        d_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    
        fur = Fur(current_A=current_A, current_B=current_B, current_C=current_C, action_A=action_A, action_B=action_B, action_C=action_C, d_time=d_time)
        db.session.add(fur)
        db.session.commit()
        print("    !")
        i += 1
        if i == 3600: #               
            i = 0
    
    
    @app.route('/')
    def hello_world():
        return 'Hello World!'
    
    
    if __name__ == '__main__':
        app.run()
    

    実行中、下のインタラクティブコマンドラインに「挿入成功!」と表示されると、説明プログラムが正常に動作しているので、データベースを開いて、リアルタイムで更新されたデータベースかどうかをリフレッシュします.
    最後に
    サードパーティ製ライブラリのインポート中に、
    from flask_sqlalchemy import SQLAlchemy
    

    この文は2つのパッケージをインポートする必要があります:Flask-SQLAlchemyとSQLAlchemy、1つだけインポートするとプログラミング中にエラーメッセージはありませんが、実行時に悲劇になります.また、エラーを報告したら、データベースの構成が変更されていないか、ポートが占有されているか、pythonエディタが変更されているかどうかなどの問題を見てみましょう.タイムスタンプの問題については、私の別のブログを参照してください.https://blog.csdn.net/xiecheng1995/article/details/90900496
    本人オリジナル.転載は出典を明記してください.ありがとうございます.