Невозможно ввести нулевое значение в bigint или двойной тип данных в таблице mariadb с использованием python - PullRequest
0 голосов
/ 26 мая 2020

Я вставляю записи в таблицу maria db из файла, используя python. Входной файл имеет заголовок. Столбцы Population и Avg_Height в файле частично пусты. Я также хочу, чтобы go было нулевым значением в таблице. Столбец заполнения в таблице установлен как bigint (20) и может принимать нулевое значение. Я пробую следующий код -

Table Definition - 
CREATE TABLE `local_db`.`table_x` (
  `Unique_code` varchar(50) NOT NULL,
  `city` varchar(200) DEFAULT NULL,
  `state` varchar(50) DEFAULT NULL,
  `population` bigint(20) DEFAULT NULL,
  `Avg_Height` double DEFAULT NULL,
  `Govt` varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

try:
    connection = mysql.connector.connect(host='localhost',
                                         database='local_db',
                                         user='root',
                                         password='root',
                                         port = '3306')

    input_file = "input_file"
    csv_data = csv.reader(open(input_file))
    next(csv_data)
    cursor = connection.cursor()
    for row in csv_data:
        cursor.execute("""
        INSERT INTO table_x(Unique_code,city,state,population,Avg_Height,Govt)
        VALUES(%s,%s,%s,%s,%s,%s)
        ON DUPLICATE KEY UPDATE city = VALUES(city),state = VALUES(state), \
        population = VALUES(population),Avg_Height = VALUES(Avg_Height),Govt = VALUES(Govt)""")
    connection.commit()
    print(cursor.rowcount, "Record inserted successfully into table_x")
    cursor.close()

except mysql.connector.Error as error:
    print("Failed to insert record into table_x table {}".format(error))



finally:
    if (connection.is_connected()):
        connection.close()
        print("MySQL connection is closed")

Но я получаю ошибку ниже -

Failed to insert record into table_x table 1366 (22007): Incorrect integer value: '' for column `local_db`.`table_x`.`population` at row 1
MySQL connection is closed

Пожалуйста, предложите, какие изменения кода я могу сделать здесь, чтобы справиться с этой ситуацией.

Ответы [ 2 ]

1 голос
/ 26 мая 2020

В этой ситуации вам нужно вставить NULL вместо пустой строки. Вы можете предварительно обработать список row, чтобы преобразовать пустые строки в None, что даст тот же эффект:

for row in csv_data:
    row = [None if v == '' else v for v in row]
    # write to table
1 голос
/ 26 мая 2020

Вам нужно вставить null вместо '' пустой строки. вот демо .

CREATE TABLE `table_x` (
  `Unique_code` varchar(50) NOT NULL,
  `city` varchar(200) DEFAULT NULL,
  `state` varchar(50) DEFAULT NULL,
  `population` bigint(20) DEFAULT NULL,
  `Avg_Height` double DEFAULT NULL,
  `Govt` varchar(50) DEFAULT NULL
) ;

INSERT INTO table_x(Unique_code,city,state,population,Avg_Height,Govt)
values
('xyz','abc','dd',null ,3, 'fd');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...