执行打印的声明

时间:2011-05-01 13:49:50

标签: python

我在python脚本中有一个print语句。

print "mysql -e\"insert into test.syllabalize values (",text_index, ",", index, ",", "'",syllable,"')\""

这输出正确的mysql语句......

mysql -e"insert into test.syllabalize values ( 3 , 5 , 'abc')"

如何执行此声明?

它只将其打印到标准输出。

更新

以下内容将尝试插入文本而不是变量值。

os.system('mysql -e"insert into test.syllabalize values (\'text_index\', \'index\', \'syllable\')"')

如何使用上述语句中的变量替换值?

4 个答案:

答案 0 :(得分:3)

import subprocess
p = subprocess.Popen("mysql -e\"insert into test.syllabalize values (",text_index, ",", index, ",", "'",syllable,"')\"",shell=True)
p.wait()

但你应该看一下使用python模块之一进行mysql数据库访问而不是这样做。那些让你使用:

db.execute("insert into test.syllabalize values (?,?,?)", (text_index, index, syllable))

参数化查询提供了对sql注入的完全保护

实际上subprocess.Popen也提供了它们

p = subprocess.Popen(["mysql", "-e", "\"insert into test.syllabalize values (",text_index, ",", index, ",", "'",syllable,"')\""])

这种形式不能进行shell注入,但sql查询仍然容易受到攻击。

答案 1 :(得分:2)

由于你使用MySQL,为什么不使用MySQLdb,它更安全,更容易。

import MySQLdb
db = MySQLdb.connect("host", "user", "pass", "db")
c = db.cursor()
c.execute("insert into test.syllabalize values ( %s , %s , %s)", (3,5,"abc"))

答案 2 :(得分:0)

最简单的方法是使用system内置函数。对于更高级的控制,请使用标准库的subprocess模块。

P.S。为避免出现安全问题,请确保清理SQL查询并注意从用户收到的输入。

答案 3 :(得分:0)

我不确定这是不是你想要的。但这是一次尝试。

test_index = 3
index = 5
syllable = 'abc'

os.system('mysql -e"insert into test.syllabalize values ({0}, {1}, {2})"' % (test_index, index, syllable))