[英]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.