在逗号中将逗号分隔的stdin行转换为字典

时间:2014-05-12 01:37:49

标签: python dictionary

拥有以下代码:

while True:
    line = sys.stdin.readline()
    if not line:
        break
        dbcur.execute("INSERT INTO test(event_type) VALUES ('noline')")
        dbcon.commit()
try:
    dbcur.execute("INSERT INTO test(event_type) VALUES ('dict')")
    dbcon.commit()
    mydict = dict(line.split(','))

    dbcur.execute("INSERT INTO test(event_type) VALUES ('" + mydict.tostr() + "')")
    dbcon.commit()
    dbcur.execute("INSERT INTO test(event_type) VALUES ('here')")
    dbcon.commit()

except Exception, e:
    sys.stderr.write(str(e))

在我的数据库中(sql条目只是为了测试stdin到达的位置,因为我无法从命令行和测试运行) - 我到了" dict",所以我&# 39;猜测我做我要做的事情的方式是不正确的。

1 个答案:

答案 0 :(得分:0)

您需要遍历列表并逐个执行INSERT

另外,为了帮助减少SQL注入的可能性,您不应该直接将值插入INSERT,而应使用%s语法并将绑定列表添加到execute中。 %s致电。

或者,您可以一次性使用INSERT语法%s一堆值。即确定列表的长度并计算thelist = line.split(',') bindingStrList = len(thelist) * '%s' dbcur.execute("INSERT INTO test(event_type) VALUES ({0})".format(', '.join(bindingStrList)), thelist) 的字符串,即:

psycopg2

注意:我上面的代码假设为{{1}},但一般来说这个概念应该适用于与postgres交互的其他库。