脚本编写mysql以在循环中检索数据

时间:2013-02-07 07:40:15

标签: php python mysql shell scripting

背景:具有bash shell脚本知识的非开发人员需要查询READ ONLY数据库实例并为给定变量生成数据。

现有文件中的数据

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。我知道shell的一面,但不知道如何整合两者。

尝试了一些可以在shell脚本开头定义“a”的所有可能值的东西,但它太繁琐了。任何帮助表示赞赏。

如果您可以轻松使用mysql并且可以提供一些指导,我对使用其他脚本语言的建议持开放态度。我的搜索指向php和python ??

2 个答案:

答案 0 :(得分: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='...'封装在'中,以防空格。

答案 1 :(得分: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块中以使其更加优雅。