Ruban Bharath Ответов: 1

Ошибка несоответствия типов данных в django sqlite3


Привет это мои столы

music_name = char(имя пользователя),userId(int)

смысл = Чаре(смысл),идентификатор пользователя(инт)

и я хочу сохранить результат на третьей таблице=music_result(имя пользователя,значение)

я использовал соединение, чтобы объединить это


когда я попытался это сделать, то получил ошибку типа

sqlite3.IntegrityError: несоответствие типов данных

пожалуйста, помогите мне решить эту ошибку

Что я уже пробовал:

db = sqlite3.connect('db.sqlite3')

cursor = db.cursor()


cursor.execute('\n'

                       'INSERT INTO  music_result SELECT username, meaning ,NULL\n'

                       'FROM music_name N JOIN music_sample1 T ON N.userid = T.userid \n')
        db.commit() 

Herman<T>.Instance

Если таблица имеет 2 поля ("и я хочу сохранить результат в третьей таблице=music_result(имя пользователя,значение)"), то какова цель нулевого поля (3-го поля) в вашем запросе?

Ruban Bharath

Сэр если я удалю нуль
у меня есть эта ошибка что я могу сделать для нее
извините у меня тоже есть поле userId в таблице результатов
"таблица music_result имеет 3 столбца, но было предоставлено 2 значения"

Herman<T>.Instance

а каково определение поля 3? Может иметь значение null?
Каковы определения полей для полей 1 и 2. совпадает ли это?

Ruban Bharath

сэр извините что подразумевается под определением поля
вы спрашиваете о запросе на создание таблицы

Herman<T>.Instance

определение будет находиться в скрипте create table, где вы укажете:
поле [datatype] [not] null ..
Какие типы данных являются полями 1 и 2 и является ли поле 3 обнуляемым?

Ruban Bharath

образец класса(модели.Модель):
userid = модели.IntegerField(primary_key=True)
смысл = модели.CharField(max_length=300)


класс sample1(модели.Модель):
userid = модели.IntegerField(primary_key=True)
смысл = модели.CharField(max_length=300)


имя класса 1(модели.Модель):
userid = модели.IntegerField(primary_key=True)
имя пользователя = модели.CharField(max_length=300)



результат класса(модели.Модель):
userid = модели.IntegerField(primary_key=True)
смысл = модели.CharField(max_length=300)
имя пользователя = модели.CharField(max_length=300)

1 Ответов

Рейтинг:
9

Herman<T>.Instance

ААА теперь все ясно:

class result(models.Model):
userid = models.IntegerField(primary_key=True)

поле PrimaryKey не может быть пустым.
Вы можете настроить его как поле идентификации. Число для ID генерируется позже и не требуется в запросе INSERT.


Ruban Bharath

Нет сэр я не мог этого решить
я покажу вам мое содержание

Ruban Bharath

views.py

def olddata(запрос):
username = request.POST.get("имя пользователя", False)
if is_valid(имя пользователя):
data = result.objects.filter(username=имя пользователя)
возврат рендеринга(запрос, "result/index.html", {'data': данные})
еще:
имя = имя(username=имя пользователя)
имя.сохранить()
дБ = и sqlite3.подключение('дБ.и sqlite3')
курсор = db.cursor()
курсор.выполнить ("выбрать значение из music_sample"')
rand = курсор.fetchall()
rand_item = Рэнд[случайный.randrange(лен(Рэнд))]
курсор.выполнить('вставить в music_sample1(идентификатор,значение) значения(null,?)', rand_item)
курсор.выполнить ("вставить в music_result выберите имя пользователя,смысл, значение null
Из music_name Н присоединяйтесь к music_sample1 Т О Н. имя пользователя = имя пользователя т. "')
дБ.совершать()
для строки в result.objects.all():
если результат.объекты.фильтр(логин=ряд.имя пользователя).функция count() &ГТ; 1:
подряд.удалить()
data = result.objects.filter(username=имя пользователя)
возврат рендеринга(запрос, "result/index.html", {'data': данные})


def is_valid(имя пользователя):
Кон = и sqlite3.подключение('дБ.и sqlite3')
шавка = кон.курсор()
cur.execute('выберите имя пользователя из music_output')
данные = шавка.fetchall()
для строки в данных:
если строка[0] == имя пользователя:
вернуть true
возвращать false


тогда мои модели таковы:

образец класса(модели.Модель):
userid = модели.IntegerField(primary_key=True)
смысл = модели.CharField(max_length=300)


класс sample1(модели.Модель):
userid = модели.IntegerField(primary_key=True)
смысл = модели.CharField(max_length=300)


имя класса(модели.Модель):
userid = модели.IntegerField(primary_key=True)
имя пользователя = модели.CharField(max_length=300,)


результат класса(модели.Модель):

userid = модели.IntegerField()
смысл = модели.CharField(max_length=300)
имя пользователя = модели.CharField(max_length=300)

что не так с этим кодом теперь я получаю ошибку типа

"NOT NULL constraint failed: music_sample1.userid"

Herman<T>.Instance

таблица находится в вашей базе данных SqlLite3. Там вы должны сделать поле PK и AutoIncrement/Identity не в вашем исходном коде

Ruban Bharath

извините я не совсем ясно выразился не могли бы вы сказать мне в общих чертах Пожалуйста сэр

Herman<T>.Instance

читать этот.
Речь идет об определении первичного ключа.

2.0 целочисленный первичный ключ
Одним из исключений из типологичности SQLite является столбец, тип которого является целочисленным первичным ключом. (И вы должны использовать "INTEGER", а не "INT". Столбец типа INT PRIMARY KEY не имеет типа, как и любой другой.) Целочисленные столбцы первичного ключа должны содержать 32-разрядное целое число со знаком. Любая попытка вставить нецелые данные приведет к ошибке.

Целочисленные столбцы первичного ключа можно использовать для реализации эквивалента автоинкремента. Если вы попытаетесь вставить NULL в целочисленный столбец первичного ключа, столбец фактически будет заполнен целым числом, которое на единицу больше самого большого ключа, уже находящегося в таблице. Или если самый большой ключ равен 2147483647, то столбец будет заполнен случайным целым числом. В любом случае целочисленному столбцу первичного ключа будет присвоено уникальное целое число. Вы можете получить это целое число с помощью функции API sqlite_last_insert_rowid() или с помощью функции SQL last_insert_rowid() в последующем операторе SELECT.

Ruban Bharath

хорошо, сэр, но я ввел значение только правильно, но это делает меня ошибкой.

Herman<T>.Instance

какая ошибка?

Ruban Bharath

Я хочу получить идентификатор викторины(викторина-это таблица с полями id,qname) с передней страницы и сравнить ее с 1,2,3,4 и выполнить функцию, соответствующую условию


дБ = и sqlite3.подключение('дБ.и sqlite3')
курсор = db.cursor()
quizid = request.GET.get('quizid')
cursor.execute('SELECT quizid,qname FROM music_quiz WHERE quizid = '+quizid)
данные = курсор.fetchone()

но здесь у меня есть такая ошибка как

можно только объединить str (не "NoneType") с str

Herman<T>.Instance

это еще одна проблема, чем у вас есть в этой теме.
Какова ценность quizId? Вы отладили его?
Вы должны лучше исследовать, в чем заключается ваша проблема, вместо того чтобы спрашивать обо всем.
Ты гуглил?

Ruban Bharath

Извините сэр ,Да сэр результаты только для списка и кортежей, но не для str он показал