0

2 つのビジネス システムから MySQL にデータをインポートする作業を行っています。関連する部分のみをインポートするために、システム間の違いを比較するための bash スクリプトをいくつか作成しました。ここで、データをロードできるように SQL クエリを作成する必要があります。私の主な問題は、単一引用符をエスケープすることです。エスケープする必要がある以下のコード部分を追加しましたが、どういうわけかそれは時々しか行われず、一貫性がありません。理解できません...

TEXT=${PART[1]/\'/\\\'}

それで...データをエスケープしてデータをパイプできるより良い方法/プログラムはありますか?絶対に最善の解決策は、MySQL をload data infileと混合して使用することon duplicate updateですが、私の理解が正しければ、それはまだ実装されていません。

4

3 に答える 3

1

Python でMySQLdbを使用し、準備済みステートメント (パラメーター化されたクエリ) を使用します。

select ステートメントとデータ タプルの間で、パーセント記号の代わりにカンマを使用していることに注意してください。Python ではなく、モジュールに文字列置換を行わせたい。

c=db.cursor()
max_price=5
c.execute("""SELECT spam, eggs, sausage FROM breakfast
          WHERE price < %s""", (max_price,))
于 2012-05-28T13:22:56.420 に答える
1

Bashはおそらくそれを行うための適切なツールではありませんが、アプローチを少なくとももう少し正確にするために、試すことができます

TEXT=${PART[1]//\'/\\\'}

つまり、二重スラッシュを使用して置換を繰り返します。

引用man bash

パターンが / で始まる場合、パターンのすべての一致が文字列に置き換えられます

于 2012-05-28T13:15:06.300 に答える
0
echo "aaa''bbb" | sed "s/'/\\\'/g"

aaa\'\'bbb
于 2012-05-28T13:24:55.697 に答える