如果不使用MariaDB在表中插入数据,如何检查表中是否存在数据并更新值?

2024-05-18 23:42:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两张桌子。第一个表包含一些产品,第二个表用于临时数据存储。两个表具有相同的列名。在

Table `products`: contains this columns
                 - id (unique, autoincrement)
                 - name
                 - quantity
                 - price
                 - group
Table `temp_stor`: contains this columns
                 - id (unique, autoincrement)
                 - name
                 - quantity
                 - price
                 - group

我想从第一个表中获取一行(名称、数量、价格、组),如果数据不存在,则将其插入到第二个表中。如果temp_stor中存在相同的数据,我只想更新一列(数量)。在

例如: 我从products得到下面的一行('cola','1','2.5','soda'),我想检查temp_stor,看看这行是否存在。temp_store表如下所示:

^{pr2}$

我们看到第二行存在,我想更新它的数量。表格如下所示:

    ('milk 1L','1','1.5','milks')
    ('cola','2','2.5','soda')
    ('bread','1','0.9','pastry')
    ('7up','1','2.8','soda')

如果表格如下所示:

    ('milk 1L','1','1.5','milks')
    ('bread','1','0.9','pastry')
    ('7up','1','2.8','soda')

我想把这行插入表中。所以看起来像这样:

('milk 1L','1','1.5','milks')
('bread','1','0.9','pastry')
('7up','1','2.8','soda')
('cola','1','2.5','soda')

这可以通过sql查询来实现吗?我需要在python代码中实现它。我可以处理python部分,但我对sql不太在行。在

谢谢你

更新1: 我忘了指明最重要的事情,这是我的错。我想检查productname表中是否存在productname。只有名称应该是唯一的。如果产品存在,我不想只更新它的quantity值,如果product不存在,我想把它插入temp_stor表中。在


Tags: 数据数量产品tabletempquantityproductscontains
2条回答

假设“如果数据不存在”意味着“如果名称+数量+价格+组”的组合不存在?

添加

UNIQUE(name, quantity, price, group)

那么

^{pr2}$

小调(?)缺点:这会(我认为)“烧掉”身份证。在您的示例中,它将分配id的4个新值,但只使用其中一个。

更新问题后

没有以上的索引,反而没有这个。(我假设product拼写为“name”?)

UNIQUE(name)

然后。。。

INSERT INTO products 
          (name, quantity, price, group)
    SELECT name, quantity, price, group FROM temp_stor
    ON DUPLICATE KEY     this will notice UNIQUE(name)
        UPDATE
            quantity = VALUES(quantity);

使用此构造时不使用UPDATEing所有额外列(quantity、price、group)。如果临时存储器的price或{}有不同的值怎么办?

查看How to connect Python programs to MariaDB以了解如何连接到数据库。

之后,您可以从temp_stor中选择与从products获得的行相同的id行。让row是您获得的值的元组。

cursor = mariadb_connection.cursor()
cursor.execute("SELECT * FROM temp_stor WHERE id=%s", (some_id,))

如果此查询的结果不包含任何内容,表明没有此类行,则可以继续插入该行,否则,更新该行。

^{pr2}$

更新: 只需执行一个查询即可执行类似操作:

INSERT INTO temp_stor (id, name, quantity, price, group) VALUES(1, "cola", '2.5', 'soda') ON DUPLICATE KEY UPDATE quantity='2.5'

这里我假设1id,而{}是名称。如果您希望name是唯一的,那么应该将该键设为该键,因为该查询当前只比较键,在本例中,该键似乎是id

相关问题 更多 >

    热门问题