Python 给定表和列名,如何测试INSERT是否需要在要插入的值周围加引号(“”)?

Python 给定表和列名,如何测试INSERT是否需要在要插入的值周围加引号(“”)?,python,sql,postgresql,psycopg2,Python,Sql,Postgresql,Psycopg2,我有一个列名称/值的字典,可以插入到表中。我有一个生成INSERT语句的函数。我被卡住了,因为函数总是在值周围加引号,有些是整数 e、 g.如果第1列是integer类型,则该语句应插入myTable col1 VALUES 5中;vs 在myTable col1中插入值“5”;第二个错误表示第5列不存在 编辑:我发现了我认为存在的问题。该值用双引号表示,而不是单引号,因此为5 在Python中,给定一个表名和列名,如何测试INSERT语句是否需要在值周围加上引号?虽然我个人不喜欢这个想法,但在

我有一个列名称/值的字典,可以插入到表中。我有一个生成INSERT语句的函数。我被卡住了,因为函数总是在值周围加引号,有些是整数

e、 g.如果第1列是integer类型,则该语句应插入myTable col1 VALUES 5中;vs 在myTable col1中插入值“5”;第二个错误表示第5列不存在

编辑:我发现了我认为存在的问题。该值用双引号表示,而不是单引号,因此为5


在Python中,给定一个表名和列名,如何测试INSERT语句是否需要在值周围加上引号?

虽然我个人不喜欢这个想法,但在Postgres中插入时可以在整数周围加上单引号

也许您的问题在于缺少括号:

INSERT INTO myTable(col1)
    VALUES('5');
是说明此代码的SQL小提琴


正如您在评论中所指出的,双引号在Postgres中不起作用。

您当然希望使用库函数来决定是否引用插入的值。如果您要插入用户输入的任何内容,编写自己的报价函数可能会导致错误

从您的标签中可以看出您正在使用psycopg2-我发现它可能能够回答您的问题,因为我不熟悉该库。主要的要点似乎是你应该使用

cursor.execute("query with params %s %s", ("param1", "pa'ram2"))

它将自动处理param1和param2所需的任何引用。

此问题用psycopg2标记-您可以使用格式字符串准备语句,并在许多情况下使用psycopg2推断类型

cur.execute('INSERT INTO myTable (col1, col2) VALUES (%s, %s);', (5, 'abc'))
psycopg2将为您处理它,因为Python知道5是一个整数,“abc”是一个字符串

您可以始终使用单引号,但要小心,如果值包含引号,则必须将其加倍:插入示例值\u t值“OHara”; 您可以决定检查要插入de目的地类型的regardles的值 您可以决定检查目标字段的类型 正如您在中所看到的,在文本字段中插入整数或在数字字段中表示整数的字符串都是无关紧要的

要检查字段类型,可以使用信息模式:

 select data_type from information_schema.columns 
   where table_schema='public'
     and table_name='example'
     and column_name='value_i';

问题似乎是由于在要插入的值上使用双引号而不是单引号引起的。这可能吗?是的,在生成字符串时,应该在SQL语句中使用单引号。双引号保留用于引用符号名,实际上它们不会显示太多。@Celeritas。是的,但是你的问题没有提到双引号。我刚刚意识到我用来生成语句的函数使用了双引号。对不起,我没有从用户那里插入任何内容。呵呵,我只是通知你。我其余的评论可能仍然相关。