gpt4 book ai didi

python - Postgres 外部数据包装器 : insert to mysql table primary key increment issue

转载 作者:行者123 更新时间:2023-11-29 08:07:53 24 4
gpt4 key购买 nike

我正在使用 PostgreSQL 外部数据包装器 Multicorn (使用 SQLAlchemy)映射外部 MySQL 数据库中的表。到目前为止,一切似乎都工作正常,除了一个问题:如果我在没有指定主 ID 的情况下在我的外部 mysql 表上运行插入查询,因为它设置为自动增量,外部数据包装器会尝试追加并从 1 开始增量,即使这样的键已经存在于远程 MySQL 表中。通过示例可以更好地解释这一点:

MySQL 表:

CREATE TABLE `test` (
`id` INT NOT NULL AUTO_INCREMENT,
`value` VARCHAR(100) NULL DEFAULT NULL,
PRIMARY KEY (`id`));

MySQL表数据:

select * from test;
+----+-------+
| id | value |
+----+-------+
| 1 | val1 |
| 2 | val2 |
| 3 | val3 |
+----+-------+

PostgreSQL FDW 服务器:

CREATE SERVER test foreign data wrapper multicorn options (wrapper 'multicorn.sqlalchemyfdw.SqlAlchemyFdw');

PostgreSQL FDW 表:

create foreign table test1 (
id serial,
value character varying
) server test options (
tablename 'test',
db_url 'mysql://root:root@127.0.0.1/test',
primary_key 'id'
);

这是我尝试过的插入语句:

insert into test1 (value) values ('val4');

它抛出此错误:

ERROR:  Error in python: IntegrityError
DETAIL: (IntegrityError) (1062, "Duplicate entry '1' for key 'PRIMARY'") 'INSERT INTO test (id, value) VALUES (%s, %s)' (1L, u'val4')

出于某种原因,有人尝试手动插入我已在两个数据库/表上指定为自动增量的主 ID。为什么会发生这种情况以及如何解决它?这是什么原因造成的,是 Postgres、FDW 插件 Multicorn 还是 SQLAlchemy?

最佳答案

如果在 PostgreSQL 端使用 int 而不是 serial 会怎样?

create foreign table test1 (
id int,
value character varying
) server test options (
tablename 'test',
db_url 'mysql://root:root@127.0.0.1/test',
primary_key 'id'
);

关于python - Postgres 外部数据包装器 : insert to mysql table primary key increment issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22347680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com