ЗАМЕНА Python в базе данных SQL Azure

#python #sql #replace #azure-sql-database

#python #sql #заменить #azure-sql-database

Вопрос:

Я работаю над способом автоматического обновления нашей базы данных Azure. Моя первая версия была с командой INSERT, но теперь мне нужна более надежная команда SELECT REPLACE. Следующая строка:

 cursor.execute("SELECT REPLACE INTO [dbo].[PPC_TPEX_TEST]([Enter],[Leave],[StartTime],[EndTime],[Area], [Camera]) values(?,?,?,?,?,?)",
                    row['entry'], row['exit'], row['Start'], row['End'], row['Area'], row['Camera'])
  

Возникает только следующая ошибка:

 cursor.execute("SELECT REPLACE INTO [dbo].[PPC_TPEX_TEST]([Enter],[Leave],[StartTime],[EndTime],[Area], [Camera]) values(?,?,?,?,?,?)",pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Incorrect syntax near 'Enter'. (102) (SQLExecDirectW); [42000] [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Statement(s) could not be prepared. (8180)")
  

Комментарии:

1. REPLACE INTO это синтаксис MySQL. Вы используете MySQL или MSSQL? Даже для MySQL синтаксис должен быть REPLACE INTO , а не SELECT REPLACE INTO !

2. Я использую базу данных SQL в среде Azure. ЗАМЕНА В выдает мне много ошибок, не могли бы вы написать весь запрос? может быть, я вижу, где я ошибаюсь. Заранее большое вам спасибо!

3. опубликовано в качестве ответа.

Ответ №1:

Из приведенного выше комментария следует, что вы используете базу данных Azure SQL, которая основана на Microsoft SQL Server (стандарт T-SQL). В T-SQL нет ничего REPLACE INTO подобного MySQL. Вместо этого вы можете использовать слияние для тех же целей, что и ЗАМЕНА.

Обычным сценарием является обновление одного или нескольких столбцов в таблице, если существует соответствующая строка. Или вставка данных в виде новой строки, если соответствующая строка не существует.

Пример (используйте таблицу и столбец в соответствии с вашим сценарием):

 MERGE dbo.Table1 AS target  
    USING (SELECT @id, @Name) AS source (Id, Name)  
    ON (target.Id= source.Id)  
    WHEN MATCHED THEN
        UPDATE SET Name = source.Name  
    WHEN NOT MATCHED THEN  
        INSERT (Id, Name)  
        VALUES (source.Id, source.Name) 
  

И если вы хотите использовать MySQL конкретно, это также доступно как другой сервис в Azure. https://azure.microsoft.com/services/mysql /