Как я могу ввести Null / None в MySQL - PullRequest
0 голосов
/ 25 мая 2019

Я использую Python 3.7 и pyMySQL в качестве соединителя с сервером MySQL.

Я пытаюсь выполнить следующий запрос:

query="INSERT IGNORE INTO  tweets (ID, Text,create," \
                    "Date,local,foolowed,Count," \
                    "isqwdii,inR,in " \
                    "Sensitive,redirection)" \
                    "VALUES (%s,%s,%s,%s,%s,%d,%d,%d,%s,%s,%d,%d)"
vals=[kwargs['ID'], kwargs['Text'],
                   kwargs['create'], kwargs['Date'],
                   kwargs['local'], kwargs['foolowed'],
                   kwargs['Count'], kwargs['isascii'],
                   kwargs['inR'], kwargs['in'],
                   kwargs['Sensitive'], kwargs['redirection']] 
self.__cur.execute(query,vals)
self.__conn.commit()

проблема в том, что некоторые из% dможет иметь значение None, и когда это происходит, я получаю следующую ошибку «Ошибка типа:% d формат: требуется номер, а не str».

Я не могу использовать формат, потому что он приведет к получению None в виде строки вБД.Я хочу, чтобы БД получила его как None / NULL

Заранее спасибо

1 Ответ

0 голосов
/ 26 мая 2019

Я думаю, вам нужно проверить, является ли оно NULL в вашем коде Python, и если да, заменить %d на %s для строки .

( Мой опыт работы с PHP - Null, это строковый тип, и поэтому я предполагаю, что он переносится на интерфейсы Python MySQL )

поэтому псевдокод будет:

>>>    type['isascii'] = '%d'
>>>    if kwargs['isascii'] is None:
>>>        type['isascii'] = '%s'

>>>>   query= "INSERT IGNORE INTO  tweets (ID, Text,create," \
                "Date,local,foolowed,Count," \
                "isqwdii,inR,in " \
                "Sensitive,redirection)" \
                f"VALUES (%s,%s,%s,%s,%s,%d,%d,{str(type['isascii'])},%s,%s,%d,%d)"

Я прошу прощения, потому что я не знаю синтаксис Python 3.7, но я надеюсь, что это дает вам концепцию.

Ответ от Leo120:

На самом деле это сработало, когда я поместил все заполнители как% s (и получил все данные, необходимые для MySQL). как выясняется, в pymysql% s обозначает все, странно. спасибо за помощь

...