繁体   English   中英

在Python Psycopg2查询中转义字符

[英]Escaping characters in Python Psycopg2 query

我试图转义字符以在python中创建一个事务块并一次提交所有操作而没有成功...

例如:

def transaction_block(sql):
    global sql_transaction
    sql_transaction.append(sql)
    if len(sql_transaction) > 1000:
        db.execute('BEGIN TRANSACTION')
        for s in sql_transaction:
            try:
                db.execute(s)
            except Exception as e:
                print(e)
        db.commit()
        sql_transaction = []

def sql_insert_comment(parentid,comment):
    try:
        sql = "INSERT INTO p_reply (parent_id, comment) VALUES ('{}','{}');".format(parentid, comment)
        transaction_block(sql)
    except Exception as e:
        print('error s02',str(e))

我应该如何调整它以使用%s,这样我才能完全摆脱它? 还是有更好的方法来做到这一点?

### UPDATE 1 ###

使用execute_values()积分找到了可能的答案: https : //billyfung.com/writing/2017/06/improving-multiple-inserts-with-psycopg2/

性能提高700%

如果您知道更好的方法,请让我知道;)

像这样的事情呢:

entries = [
    ("parent_id1", "comment1"),
    ("parent_id2", "comment2"),
    ("parent_id3", "comment3")
]
query = "INSERT INTO p_reply (parent_id, comment) VALUES %s;" % ", ".join(str(entry) for entry in entries)

这可能符合您的需求:

>>> "INSERT INTO p_reply (parent_id, comment) VALUES %s;" % ", ".join(str(entry) for entry in [("parent_id1", "comment1"), ("parent_id2", "comment2")])
"INSERT INTO p_reply (parent_id, comment) VALUES ('parent_id1', 'comment1'), ('parent_id2', 'comment2');"

如果数据集中有整数( parent_id值),则可能还必须将其转换为str或修改格式化的字符串以添加'

您应该这样逃避:

try:
    sql = "INSERT INTO p_reply (parent_id, comment) VALUES (%s,%s)"
    db.execute(sql,[parent_id,comment])
except Exception as e:
    print('error s02',str(e))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM