2017-02-23 174 views
1

Я пытаюсь добавить значения в базу данных MySQL, используя пакет python MySQLdb. Некоторые из моих столбцов не могут быть нулевыми, и я изо всех сил пытаюсь найти способ проверить, какие значения столбцов должны присутствовать, прежде чем пытаться добавить данные в мои таблицы. На данный момент у меня возникли, чтобы разобрать файл, извлечь ряд ключа, значение пары, работать, какие таблицы они должны быть добавлены, а затем добавить их с помощью:MySQL из Python с использованием MySQLdb

cursor.execute("""INSERT INTO %s (%s) VALUES (\"%s\")""" %(tbl, cols, vals) 

я могу убедиться, что я добавить столбцы в правильном порядке, и я могу получить идентификаторы автоматического увеличения, чтобы связывать между различными таблицами. Я хотел бы сделать это для каждой таблицы, проверить, содержит ли он столбец с нулевым значением, затем, при необходимости, соответствующим образом изменяя входные значения, а затем попытаться добавить значения в таблицу. Любые предложения/лучшие идеи о том, как я могу это сделать?

ответ

1

Вы можете проверить таблицу INFORMATION_SCHEMA.COLUMNS в MySQL, чтобы определить, принимает ли столбец значения NULL.

SELECT `IS_NULLABLE` 
FROM INFORMATION_SCHEMA.`COLUMNS` 
WHERE `TABLE_SCHEMA` = 'SchemaName' 
AND `TABLE_NAME` = tbl 
AND `COLUMN_NAME` = col 
; # returns YES/NO 

Вы должны улучшить синтаксис вашего синтаксиса cursor.execute(stmt, [params]) передать в параметре, а не жесткого кодирования его в текстовом SQL. Это будет гораздо более надежным:

sql = "INSERT INTO %s (%s)" % (tbl, col) 
sql += " VALUES(%s)" 
cursor.execute(sql, [val]) 
connection.commit() 

MySQL Docs for cursor.execute

+0

Спасибо, я выполнил команду MySQL в Python, и не я, то с помощью возвращаемого значения (ДА/НЕТ), чтобы определить, нужно ли мне добавить дополнительно колонка/значение. Спасибо за совет синтаксиса. – Conor