我在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\')"')
如何使用上述语句中的变量替换值?
答案 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))