現在、カレンダーイベントを使用して特定の時刻に毎日csvを送信するためにMySQLスクリプトを起動するAppleScriptを作成しています。AppleScriptでターミナルのMySQLスクリプトをフォーマットする - 問題をエスケープする問題
私は両方の部分に正しい考えがあると思います。
SET @sql_text := CONCAT('SELECT "ID", "FirstName", "LastName", "Employer", "Activist/Lead"
UNION ALL
SELECT * FROM
(SELECT e.id, m.firstname, m.lastname, e.employer, (CASE WHEN m.Lead="X" THEN "Lead" ELSE "Activist" END) AS "Activist/Lead"
FROM events e
LEFT JOIN people m ON e.id = m.id
WHERE ((STR_TO_DATE(e.startdate,"%m/%d/%Y") >= SUBDATE(now(), INTERVAL 1 YEAR)) AND (e.eventtype IN("House Party","Blitz","Politics"))
GROUP BY e.id
HAVING count(e.id)>=1) t
INTO OUTFILE \'/Users/Ryan/Activists_', DATE_FORMAT(NOW(), '%Y%m%d'), '.csv\'
FIELDS TERMINATED BY \',\' OPTIONALLY ENCLOSED BY \'"\'
LINES TERMINATED BY \'\\n\'
');
PREPARE s1 FROM @sql_text;
EXECUTE s1;
DROP PREPARE s1;
だけではMySQLのスクリプトは、私が選んだのフォルダに私の命名規則と.CSVを作成するには良い仕事をしないこと:これは(MySQLの中で直接実行したときに動作します)MySQLのスクリプトのバージョンです。しかし、あなたが見ることができるように、MySQLスクリプトが動作するために必要な、一重引用符と二重引用符(既にいくつかはエスケープされています)がたくさんあります。
けれども、私は、ターミナルを介して実行するのAppleScriptにそれを置くとき、私は引用符に起因するエラーのすべての種類を取得:
あなたが見ることができるように、それは最初だから、それは「ID」を強調していますMySQLスクリプトの二重引用符の出現。私はすべての二重引用符を\"
に変更しようとしましたが、ちょうどもっと紛らわしいようです - 特にINTO OUTFILE
セクションでは、一重引用符が表示され始めるからです。 (その時点で[一重引用符で終わる]エラーを返すExpected “"” but found unknown token.
)
AppleScriptに私にエラーを与えないようにエスケープ引用符を再構成できる方法は誰も知っていますか? MySQLスクリプトが正常に動作するための方法彼らはお互いに戦っているように感じる。
\ " –
@CraigSmith単一のバックスラッシュを使用するだけで、二重引用符を渡すことができるはずです。これを行うと、INTOで一重引用符で囲むまでエラーになりません – Ryan
@CraigSmithまた、上のスクリーンショットから一番上の一重引用符にヒットしたときの構文エラーが「期待」に変わりました。 ""しかし、未知のトークンを発見しました。 " – Ryan