1

背景: bash シェル スクリプトの知識を持っていない開発者は、読み取り専用 DB インスタンスをクエリし、特定の変数のデータを生成する必要があります。

既存ファイルのデータ

A1 B1
A2 B2
......
...
....
An Bn

bashスクリプト内でmysqlデータベースに接続し、選択ステートメント「n」回をループしたいと思います

select x, y,z from table tablet_vendors where a=A1 and b=B1

ただし、最初は A1 と B1 をパラメータとして渡し、次回は A2 と B2 を for ループで n に渡す必要があります。シェル側のことは知っていますが、両方を統合する方法がわかりません。

シェルスクリプトの先頭で「a」のすべての可能な値を定義できるものを試しましたが、面倒です。どんな助けでも大歓迎です。

他のスクリプト言語が mysql で簡単に使用できる場合、およびガイダンスを提供できる場合は、他のスクリプト言語の使用に関する提案をお待ちしています。私の検索は php と python を指していますか??

4

2 に答える 2

0

より簡単なバージョンは次のとおりです。

import MySQLdb as mysql
import csv

con = mysql.connect('localhost','user','password','dbname')
cur = con.cursor()

q = "select x, y,z from tablet_vendors where a=%s and b=%s"

with open('somefile.txt') as f:
  rows = csv.reader(f,delimiter='\t')
  for row in rows:
     cur.execute(q,row)
     result = cur.fetchone()
     while result:
        print result
        result = cur.fetchone()

MySQL によってスローされたエラーは、実行を停止します。cur.行を try/except ブロックでラップして、よりエレガントにすることができます。

于 2013-02-07T08:34:40.767 に答える
0
#!/usr/bin/python
# -*- coding: utf-8 -*-
import _mysql, sys

argumentfile = sys.argv[1]

with open(argumentfile) as f:
    sqlarguments = f.readlines()

con = None
username, password = 'testuser', 'testpass'
database = 'testdb'

try:
    con = _mysql.connect('localhost', username, password, database)

    for line in sqlarguments:
        con.query("SELECT x, y,z FROM TABLE tablet_vendors WHERE a='%s' and b='%s;'" % line.split('\t'))

        result = con.use_result()
        print "MySQL data returned: %s" % \
            result.fetch_row()[0]
except _mysql.Error, e:
    print "Error %d: %s" % (e.args[0], e.args[1])
    sys.exit(1)

finally:
    if con:
        con.close()

Python と MySQL の詳細: http://zetcode.com/db/mysqlpython/ (MySQL とすべてのセットアップが完了している場合は、「最初の例」に進んでください)

sqlarguments次のような最初で唯一のパラメーターとしてスクリプトにパラメーターとして渡されるテキストファイルから取得されることに注意してくださいpython2 script.py sqlfile.txt。また、SQL パラメーターはスペースではなく \t (タブ) で区切られていると想定していることにも注意してa='...'ください。b='...''

于 2013-02-07T07:50:22.310 に答える