この記事は主にMySQLデータ移行方法とツールの分析を紹介します。サンプルコードを通じて詳細に紹介されており、皆さんの勉強や仕事に一定の参考値があります。困っている友人は参考にしてください。 データ移行は、すべてのバックエンドが遭遇するタスクの1つです。この記事では、一般的なデータ移行方法とツールを紹介します。 mysqldump: データ構造を変更せずにデータを移行する データのエクスポート mysqldump -u root -p DATABASE_NAME テーブル名 > dump.sql データの回復 mysql -u root -p DATABESE_NAME < dump.sql またはmysqlクライアントに接続する mysql> ソース dump.sql pymysqlを使用してデータベースに接続する ユーザー名とパスワードで直接接続できるデータベース クラス GeneralConnector: def __init__(self, config, return_dic=False): 自己.return_dic = return_dic self.config = 設定 def __enter__(self): self.conn = pymysql.connect(**self.config、ポート=3306) self.return_dicの場合: # データの行は辞書になります self.cursor = self.conn.cursor(pymysql.cursors.DictCursor) それ以外: 自己カーソル = 自己connカーソル() 自己カーソルを返す def __exit__(self, *args): 自己カーソルを閉じる() 自己コミット() 自己接続を閉じる() 使用: # ローカルデータベース = { # 'ユーザー': 'root', # 'passwd': ''、 # 'ホスト': '127.0.0.1', # 'db': 'local_db' # } GeneralConnector(const.local_db, return_dic=True) をカーソルとして使用します。 カーソル.execute('SELECT `col1`, `col2` FROM test;') カーソル.fetchall() を返す SSH接続を必要とするサーバー上のデータベースに接続する クラス SSHConnector: def __init__(self, server, config, return_dic=False): 自己.return_dic=リターンディック self.server = サーバー self.config = 設定 def __enter__(self): self.conn = pymysql.connect(**self.config、ポート=self.server.local_bind_port) self.return_dicの場合: # データの行は辞書になります self.cursor = self.conn.cursor(pymysql.cursors.DictCursor) それ以外: 自己カーソル = 自己connカーソル() 自己カーソルを返す def __exit__(self, *args): 自己カーソルを閉じる() 自己コミット() 自己接続を閉じる() 使用: #SERVER = SSHTunnelForwarder( # (リモートホスト、sshポート)、 # ssh_username=ユーザー名, # ssh_pkey=SSH_KEY、 # ssh_private_key_password=SSH_KEY_PASSWD, # remote_bind_address=('127.0.0.1', 3306) # mysql サービスの場所# ) # server_db = { # 'ユーザー': 'root', # 'passwd': ''、 # 'ホスト': '127.0.0.1', # 'db': 'server_db' # } # サーバーとして const.SERVER を使用して、サーバーの mysql をローカル ポート 3306 にバインドするトンネルを作成します。 SSHConnector(server, const.server_db) をカーソルとして使用します。 cursor.execute('テーブルを表示;') データ = カーソル.fetchall() 印刷(データ) カーソルの各種操作 1.カーソル.実行(sql_statement) SQL文を実行する 2. カーソル.fetchall() カーソルのすべての結果を取得します。これは、選択ステートメントの後によく使用されます。 3. カーソル.fetchone() カーソルの最初の結果を取得する 4. カーソル.lastrowid 最後のデータID 5.カーソル.executemany(挿入ステートメント、データリスト) バッチデータを挿入する例: サーバーとしてconst.SERVERを使用する場合: カーソルとしてconnector.Connector(server, const.db_1)を使用します: cursor.execute('設定から*を選択') 設定 = cursor.fetchall() カーソルとしてconnector.Connector(server, const.db_2)を使用します: cursor.executemany('設定に (`id`,`theme`,`user_id`) の値 (%s,%s,%s) を挿入',preferences) カーソルからリスト型の結果を取得する カーソル.execute('SELECT `name` FROM user;') fetchall()を直接使用すると、タプルにラップされたデータしか取得できません。 カーソル.fetchall() # (('ジャック',), ('ベン')) ここで、Djangoのflat=Trueのようにリスト結果セットを取得したい。 2つの方法があります リストの理解 name_list = [x[0] カーソル内の x に対して cursor.fetchall()] この方法の欠点は、最初に fetchall() を使用して結果セットをメモリに読み込み、次にそれをリストに変換するため、効率的ではないことです。 イターツール name_list = list(itertools.chain.from_iterable(カーソル)) この方法をお勧めします。まず、すべての結果をメモリにフェッチしません。次に、itertools を使用してリストを生成する方が、リストの理解よりも高速です。 データ移行でDjangoモデルを使用する方法
インポートOS ジャンゴをインポートする インポートシステム sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) os.environ.setdefault("DJANGO_SETTINGS_MODULE", "translate.settings") django.setup() DjangoはSSHトンネルのローカル転送を介してリモートデータベースに接続します リモートデータベースをローカルポートにマップするためのSSHトンネルを作成します ssh -L local_port:localhost:<リモート mysql ポート> <ユーザー名>@<リモート ホスト> SSH接続が進行中の場合、ローカルポートにアクセスすることでリモートデータベースにアクセスできます。 Django設定でデータベースを構成する データベース = { 'デフォルト': { 'エンジン': 'django.db.backends.mysql', 'NAME': db_name、 'USER': remote_mysql_user, # リモート データベース アカウントのパスワード 'PASSWORD': remote_mysql_password, 'ホスト': "localhost", 'PORT': local_port、# リモート データベースはローカル ポートにマップされます 'OPTIONS': {'init_command': 'SET default_storage_engine=INNODB;'} } } この時点で、Djangoのモデルを使用する場合、sshトンネルを介してリモートデータベースにアクセスします。 予防
以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: JavaScript Canvas は動的なワイヤーフレーム効果を描画します
>>: 最新の超詳細な VMware 仮想マシンのダウンロードとインストールのグラフィック チュートリアル
アイデアそれは実はとても簡単ですシェル スクリプトを記述して、mysql の mysqldump を...
目次Prometheusはエクスポーターを介してMySQLを監視し、Grafanaチャートで表示しま...
基本的な構文text-overflow を使用するには、hight、over-flow:hidden...
背景説明: 既存の負荷分散装置には、付加価値状態にある指標があります (増加するだけで減少しないため...
導入MySQL には、SELECT ステートメントを分析し、開発者が最適化できるように SELECT...
この記事では、JavaScriptカスタムカレンダーエフェクトの具体的なコードを参考までに紹介します...
過去 2 日間、ワークベンチが Alibaba Cloud Server に接続できない問題を解決す...
一番外側の boxF は 120 度回転し、2 番目の boxS は -60 度回転し、3 番目の ...
問題の説明MySQL の起動時にエラーが報告されます。エラー ログを確認してください。 [エラー] ...
序文以前、ローディングスタイルのコンポーネントを作成しました。コードの再利用性を実現するために、この...
Vue2+elementui のホバー プロンプトは、外部と内部に分かれています。内部のものは el...
この記事の例では、どこにでも移動できるフローティングボタンを実現するためのVueの具体的なコードを共...
Dockerfile でのボリュームのマウントと docker -v コマンドによるマウントには明ら...
目次1. イベントの流れ1. コンセプト2. DOMイベントフロー2. イベントの委任1. イベント...
テーブルを削除することはあまり一般的ではありませんが、特に外部キーの関連付けがあるテーブルの場合は、...