背景:具有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 ??
答案 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块中以使其更加优雅。