需要シナリオ: 上司は、クローラーを使用してMySQLデータベースにデータを書き込んだり更新したりするように私に依頼しました。Baiduは2つの方法を見つけました 1 は、pymysql を使用して mysql に接続し、ネイティブの sql ステートメントを操作してデータを追加、削除、変更、および照会することです。 2 は、ネイティブ SQL ステートメントを記述せずに、sqlalchemy を使用して mysql に接続し、テーブルを構築し、ORM モデルを通じてデータベースを操作することです。これは比較的簡単です。 以下は sqlalchemy を使用した私の経験です。 実装プロセス: データベースに接続 > モデルクラスを介してテーブルを作成 > セッションを確立 > テーブル作成ステートメントを実行 > セッションを介して追加、削除、変更、クエリを実行 sqlalchemy からインポート、存在する、列、整数、文字列、外部キー、存在する sqlalchemy.ext.declarative から declarative_base をインポートします sqlalchemyからcreate_engineをインポート sqlalchemy.ormからsessionmakerをインポート # データベースエンジンを作成しました engine = create_engine("mysql+pymysql://user:pwd@ip/database name?charset=utf8") #セッションタイプを作成 DBSession = sessionmaker(bind=engine) # 公式モデルをインスタンス化します - Base は ORM モデルです Base = declarative_base() # サービス注文テーブルを作成する class ServiceOrder(Base): __tablename__ = 'サービスオーダーテーブル' id = 列(整数、主キー=True、自動増分=True) serviceOrderId = Column(String(32), nullable=False, index=True, comment='サービス注文ID') serviceDesc = Column(String(268), comment='サービスの説明') oneLevelName = 列(文字列(32)、コメント='C カテゴリ') twoLevelName = Column(String(32), コメント='T サブクラス') threeLevelName = Column(String(32), comment='I プロジェクト') fourLevelName = Column(String(32), comment='S サブ項目') transferTimes = Column(String(32), comment='転送回数') overDueStatus = Column(String(32), comment='期限切れステータス') serviceTimeLimit = Column(String(32), comment='サービス時間制限') serTimeLimitTypeName = Column(String(16), comment='時間制限タイプ') # 1対多: # serviceWorkOrder = relationship("ServiceWorkOrder", backref="serviceorder") # 多対一: 複数のサービス オーダーがサービス オーダー クラス ServiceWorkOrder(Base) に属することができます。 __tablename__ = 'サービス作業注文テーブル' id = 列(整数、主キー=True、自動増分=True) serviceWorkOrderId = Column(String(32), nullable=False, index=True, comment='サービス作業注文ID') workOrderName = Column(String(268), comment='作業指示書名') fromId = Column(String(32), comment='サービス注文ID') createUserSectionName = Column(String(32), comment='ユーザーセクションの作成') createUserName = 列(文字列(32)、コメント='作成者') handlerName = Column(String(32), comment='Handler') statusName = Column(String(32), comment='作業指示書のステータス') createTime = Column(String(32), comment='作成時刻') # 「多」側の book テーブルは、外部キーを介して user テーブルにリンクされています。 # serviceOrder_id = 列(整数、外部キー('serviceOrderTable.id')) # データベースを作成します。データベースがすでに存在する場合は作成されません。ライブラリ名に従って既存のライブラリに直接接続します。def init_db(): Base.metadata.create_all(エンジン) drop_db() を定義します: Base.metadata.drop_all(エンジン) デフ挿入更新(): # all_needed_data_lists は、データベースに挿入する必要があるデータ形式です [{key: value, ... }, { }, { }...] all_needed_data_lists 内の項目の場合: ServiceOrderRow = ServiceOrder(serviceOrderId=item['serviceOrderId'], サービス説明=item['サービス説明'], ワンレベル名=アイテム['ワンレベル名'], twoLevelName=アイテム['twoLevelName'], threeLevelName=アイテム['threeLevelName'], fourLevelName=アイテム['fourLevelName'], 転送時間=item['転送時間'], 期限超過ステータス=item['期限超過ステータス'], サービス時間制限=item['サービス時間制限'], serTimeLimitTypeName=item['serTimeLimitTypeName'], ) 試す: # exists を使用して、ターゲットオブジェクトが存在するかどうかを判断し、True または Faults を返します。 it_exists = セッション.クエリ( 存在する()。ServiceOrder.serviceOrderId == item['serviceOrderId'] ) )。スカラー() except 例外を e として: 自己ログエラー(e) 壊す 試す: # 存在しない場合は追加します。存在する場合は、既存のデータを更新します。存在しない場合は it_exists: セッション.add(サービスオーダー行) それ以外: session.query(ServiceOrder).filter(ServiceOrder.serviceOrderId == item['serviceOrderId'])\ .update(アイテム) except 例外を e として: 自己ログエラー(e) 壊す 試す: セッションコミット() self.log.info('データが正常に更新されました!') を除外する: セッション.ロールバック() self.log.info('データの更新に失敗しました!') __name__ == "__main__" の場合: # データベースを作成します。データベースがすでに存在する場合は作成されません。ライブラリ名に従って既存のライブラリに直接接続します。init_db() # 追加、削除、変更、クエリを実行するためのセッション オブジェクトを作成します。 セッション = DBSession() # セッションを使用してデータを追加または変更します。 insert_update() を送信することを忘れないでください。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
アイデア:外側のボックスは背景を設定し、内側のボックスは背景の幅と高さを設定し、ボックスを動かすアニ...
目次圧縮ファイルをダウンロードするアドレス: https://dev.mysql.com/downl...
MySQL は、スウェーデンの会社 MySQL AB によって開発されたリレーショナル データベース...
サブスクリプションメッセージテンプレートを選択または作成するWeChat アプレットにログインし、「...
目次1.Vue.js の機能: 2.Observer.js 関数 (データハイジャック): 3. C...
1. setUp関数の最初のパラメータpropsセットアップ(プロパティ、コンテキスト){}最初のパ...
目次1. 概要1.1 定義1.2 機能説明2. ELKを展開する2.1 ディレクトリとファイルを作成...
概要私は 1 年以上 Docker を使用しています。最近、サービスをすばやくオーケストレーションし...
<br />ナビゲーション設計は構造設計における主要なタスクの 1 つです。ソフトウェア...
1. 作成する [テーブル名] (フィールド1、フィールド2、...) 値 (値1、値2、...) ...
MySQL では、SQL ステートメント rename table を使用してテーブル名を変更できま...
目次序文1. サービスプログラムをインストールする2. メイン設定ファイルを書く3. サブ構成ファイ...
問題の起源私がタイトルの番号付けの問題に初めて注目したのは、学部の論文を書いていた頃まで遡ります。当...
データ操作とメンテナンスに少しでも知識のある人なら、MySQL 5.5 以前では再生に単一の SQL...
この記事では、オンラインチャットを実現するためのVue + sshフレームワークの具体的なコードを参...