0

次のステートメントを使用して、ファイルからテーブルにデータをロードしています。

LOAD DATA LOCAL INFILE '/home/100000462733296__Stats" 
INTO TABLE datapoints 
FIELDS TERMINATED BY '|' 
LINES TERMINATED BY '\n' 
(uid1, uid2, status);

ここで、カスタム値を uid1 に入力したい場合、実際にファイルから読み取るように要求せずに 328383 と言うと、どうすればよいでしょうか? 約 10 個のファイルがあり、uid1 はこれらの各ファイルの識別子です。私はこのようなものを探しています:

LOAD DATA LOCAL INFILE '/home/100000462733296__Stats" 
INTO TABLE datapoints 
FIELDS TERMINATED BY '|' 
LINES TERMINATED BY '\n' 
(uid1="328383", uid2, status);

助言がありますか?

4

3 に答える 3

3

SET 句を使用して、入力ファイルから派生したものではない値を指定できます。

LOAD DATA LOCAL INFILE '/home/100000462733296__Stats" 
INTO TABLE datapoints 
FIELDS TERMINATED BY '|' 
LINES TERMINATED BY '\n' 
(uid1, uid2, status)
SET uid1 = '328383';

uid1 のデータ型が何であるかは明確ではありませんが、値を二重引用符で囲んでいるため、文字列関連のデータ型であると想定しました。データ型が数値の場合は単一引用符を削除してください。

このSET機能がサポートする内容については、LOAD FILE のドキュメントを参照してください。ページの 1/2 より少し下にあります。

于 2009-11-29T22:17:41.953 に答える
1

MySQL シェルの代わりに Python インタラクティブ シェルを使用して、MySQL テーブルの値をインタラクティブに提供できます。

python.org から python inerpreter をインストールします (Windows を使用している場合のみ必要です。それ以外の場合は既にインストールされています)。また、http: //sourceforge.net/projects/mysql-python/files/ から mysql コネクタをインストールします(なるほどLunux/Unix を使用している場合 -- mysqldb パッケージをインストールするだけです)

その後、Python シェルで次の 3 行を入力します。

import MySQLdb
connection = MySQLdb.connect(" <hostname>", "< user>", "<pwd>", [ "<port>"] )
cursor = connection.cursor

cursor.executeメソッドを使用してSQL ステートメントを発行できますが、Python の完全な柔軟性を保持してデータを変更できることを付け加えてください。たとえば、この特定のクエリの場合: myfile = open("/home/100000462733296__Stats")

for line in file:
   uid1, uid2, status = line.split("|")
   status = status.strip()
   cursor.execute("""INSERT INTO datapoints SET uid1="328383", uid2=%s, status=%s""" %(uid2, status) )

出来上がり!(おそらく、最後の行での例外を避けるために、「line.split」行の周りに try: 句を使用します)

まだ行っていない場合は、python.org のチュートリアルで 1 時間以内に Python を学習できます。コンピューターで行うことがデータベースにデータをインポートすることだけだとしても、学ぶ価値は十分にあります。

于 2009-11-29T22:00:25.410 に答える
0

2つの簡単な考え(1つが当てはまるかもしれません:)):

  1. ファイル内の uid1 の値をすべての行で 328383 に変更します。
  2. テーブルの uid1 列を一時的に非必須に変更し、ファイルの内容をロードしてから、すべての行で値を 328383 に設定するクエリを実行します。最後に、列を必須にリセットします。
于 2009-11-29T21:49:27.050 に答える