首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复“%”或“%”附近的psycopg2语法错误?

如何修复“%”或“%”附近的psycopg2语法错误?
EN

Stack Overflow用户
提问于 2020-01-06 10:16:26
回答 2查看 3.9K关注 0票数 2

基本上尝试创建ISNERT函数,它将编译插入并执行它。

代码语言:javascript
复制
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()

返回我:

代码语言:javascript
复制
psycopg2.errors.SyntaxError: syntax error at or near "%"
LINE 1: INSERT INTO users (%s, %s) VALUES (%s, %s)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-06 13:36:43

execute() 2的函数只是注入值,而不是输入列的,您需要传递真正的列名来查询:

代码语言:javascript
复制
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")

输出:

代码语言:javascript
复制
b'INSERT INTO foo (arg1, arg2) VALUES (%s, %s)'
票数 2
EN

Stack Overflow用户

发布于 2020-01-06 10:29:26

qms数组中填充了字符串值‘’%1!‘’。您的qmark字符串然后等于'%s,%s‘。之后,在查询字符串中注入该值两次,以便“插入用户(%s,%s)值(%s,%s)”。这里的问题是,您已经用不正确的值填充了数组。您需要注入表名和值,而不是%s

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59610256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档