基本上尝试创建ISNERT函数,它将编译插入并执行它。
def Insert(self,tablename, **kwargs):
qms = []
for idx, item in enumerate(kwargs):
qms.append('%%s')
qmarks = ', '.join(qms)
res = []
res.extend(kwargs.keys())
res.extend(kwargs.values())
res = tuple(res)
QUERY = "INSERT INTO "+tablename+" (%s) VALUES (%s)" % (qmarks, qmarks)
self.dc.execute(QUERY, res)
self.db.commit()返回我:
psycopg2.errors.SyntaxError: syntax error at or near "%"
LINE 1: INSERT INTO users (%s, %s) VALUES (%s, %s)发布于 2020-01-06 13:36:43
execute() 2的函数只是注入值,而不是输入列的,您需要传递真正的列名来查询:
import psycopg2
import psycopg2.extras
class A():
def __init__(self):
self.dc = ...
self.db = ...
def Insert(self, tablename, **kwargs):
columns = []
valuePlaceholders = []
values = []
for column, value in kwargs.items():
columns.append(column)
valuePlaceholders.append('%%s')
values.append(value)
QUERY = "INSERT INTO " + tablename + " (%s) VALUES (%s)" % (', '.join(columns), ', '.join(valuePlaceholders))
print(self.db.mogrify(QUERY, values))
#self.db.execute(QUERY, values)
#self.db.commit()
a = A().Insert('foo', arg1="bar", arg2="test")输出:
b'INSERT INTO foo (arg1, arg2) VALUES (%s, %s)'发布于 2020-01-06 10:29:26
qms数组中填充了字符串值‘’%1!‘’。您的qmark字符串然后等于'%s,%s‘。之后,在查询字符串中注入该值两次,以便“插入用户(%s,%s)值(%s,%s)”。这里的问题是,您已经用不正确的值填充了数组。您需要注入表名和值,而不是%s
https://stackoverflow.com/questions/59610256
复制相似问题