尝试将准备好的语句与python的psypcop2一起用于插入时,需要手动设置。但是,将准备好的语句与序列号或时间戳等自动列一起使用会导致错误。
直接通过psql运行sql语句:
create table ps_test(
id serial primary key,
data text );
prepare pstmt (text) as insert into ps_test values( $1 );
execute pstmt( 'abc' );
execute pstmt( 'def' );
deallocate pstmt;
select * from ps_test;
给出“错误:列“ id”的类型为整数,但表达式的类型为文本”。
重写表,以便最后定义自动列:
drop table ps_test;
create table ps_test (
data text,
id serial primary key
);
prepare pstmt (text) as insert into ps_test values( $1 );
execute pstmt( 'abc' );
execute pstmt( 'def' );
deallocate pstmt;
select * from ps_test;
工作。
data | id
------+----
abc | 1
def | 2
(2 rows)
有更好的方法吗?
答案 0 :(得分:0)
您将使用标准SQL
INSERT INTO ps_test (data) VALUES ( $1 )
将$1
插入data
列中。请注意,INSERT
statement syntax允许在column_name
data
后面的括号中指定table_name
ps_test
。
因此,您准备好的陈述将是
PREPARE pstmt (text) AS INSERT INTO ps_test (data) VALUES ( $1 );