この記事は主に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 仮想マシンのダウンロードとインストールのグラフィック チュートリアル
1. インストール1. ダウンロードMySQLをダウンロードするには、MySQL公式サイトhttp:...
find コマンドは主にディレクトリやファイルを検索するために使用され、一致のために複数のパラメータ...
この記事では、例を使用して、MySQL がストアド プロシージャで引き起こすエラー状態 (SIGNA...
join() メソッド: 指定された区切り文字を使用して配列内のすべての要素を文字列に接続します。例...
MYSQL5.7.17 が MAC で接続できない問題。SQLBench_community 6.3...
1. ファイルサーバーについてプロジェクトでは、公開ソフトウェアやデータをプロジェクト チーム メン...
私はいつも、なぜMySQLデータベースのtimestampタイムゾーンの問題を無視できるのか疑問に思...
問題記録今日はプログレスバーに似た小さなコンポーネントを完成させるつもりでした。プロトタイプは次のよ...
目次序文非同期読み込みパッケージコンポーネントコンポーネントの使用インターフェースをカスタマイズする...
HTML5 では、ヘッダー、フッター、ナビゲーションなどのセマンティック タグが追加されているため...
ドッカーの作成 バージョン: '2' サービス: fastdfsトラッカー: ホスト...
序文私のように、Java バックエンドに勤勉な人であれば、多数のプロジェクト機能を実装することに加え...
1. 実験環境シリアルナンバープロジェクトソフトウェアとバージョン1オペレーティング·システムCen...
目次1. サブルート構文2. 例1. 2つの新しいコンポーネントを作成し、その内容を変更する2. ル...
目次導入子プロセスプロセスを非同期的に作成する同期作成プロセス導入Node.js のメイン イベント...