Форум программистов, компьютерный форум, киберфорум
Python: Django
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9

BinaryField ORA-01461: can bind a LONG value only for insert into a LONG column

06.03.2019, 11:03. Показов 1145. Ответов 0

Студворк — интернет-сервис помощи студентам
Есть таблица в базе с типом поля BLOB. Нужно записать в его файл. Да-да, в интернете пишут, что в 99% случаев вам этого не надо, но мне-то надо, хранить файлы на диске — не вариант.

Модель:
Python
1
2
3
4
class Test(models.Model):
    id = models.BigIntegerField(primary_key=True)
    name = models.CharField(max_length=32, blank=True, null=True)
    bb = models.BinaryField(blank=True, null=True)
Вьюшка:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class MyForm(forms.ModelForm):
    bb = forms.FileField(required=True)
 
    class Meta:
        model = Test
        exclude = ()
 
def test2(request):
    if request.method == 'POST':
        form = MyForm(request.POST, request.FILES)
        if form.is_valid():
            i = form.save(commit=False)
            bb = form.cleaned_data['bb']  # UploadedFile
            data = bb.file.read()
            # data = bytearray(data)
            # data = buffer(data)
            print(type(data))  # str or bytearray or buffer
            # i.save()   # !!!
            i.bb = data
            i.save()
    else:
        form = MyForm()
    return render(request, 'test.html', {'form': form})
Но при сохранении возникает ошибка. Если сохранять запись дважды (сначала без поля blob, потом только его), расскомментировав 18 строчку, то новая запись в таблице создаётся, но (!) данные в BLOB усекаются примерно до 16 КБ (17231 байт, если точно). Предполагаю, что записывается не весь файл, а только какой-то буфер.

А у вас есть идеи как можно хранить бинарники в BLOB oracle?

Добавлено через 2 минуты
django==1.11.15
cx-oracle==5.2.1

Добавлено через 1 час 40 минут
Если сохранять модель сразу в базу, то возникает ошибка как в названии темы. При этом генерится такой запрос:
SQL
1
INSERT INTO "TEST" ("ID", "NAME", "BB") SELECT :arg2, :arg1, :arg0 FROM DUAL
Если вызывать функцию сохранения дважды, то получаются такие запросы:

SQL
1
2
SELECT * FROM (SELECT "_SUB".* FROM (SELECT (1) AS "A" FROM "TEST" WHERE
"TEST"."ID" = :arg0) "_SUB" WHERE ROWNUM <= 1)
SQL
1
UPDATE "TEST" SET "NAME" = NULL, "BB" = NULL WHERE "TEST"."ID" = :arg0
SQL
1
INSERT INTO "TEST" ("ID", "NAME", "BB") SELECT :arg1, :arg0, :arg0 FROM DUAL
SQL
1
UPDATE "TEST" SET "NAME" = NULL, "BB" = :arg0 WHERE "TEST"."ID" = :arg1
При этом последний запрос выполняется, то файл усекается. arg0 равен некоему read-only buffer.

Добавлено через 21 минуту
Вы будете смеяться, но так заработало:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
bb = form.cleaned_data['bb']
data = bb.file.read()
 
import cx_Oracle
 
with connections['conn_name'].cursor() as db:
    blobvar = db.var(cx_Oracle.BLOB)
    blobvar.setvalue(0, data)
    sqlStr = 'update "TEST" set bb=:blobData where id = 55'
    db.setinputsizes(blobData=cx_Oracle.BLOB)
    db.execute(sqlStr, {
        'blobData': blobvar,
        })
    db.execute('commit')
    db.close()
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.03.2019, 11:03
Ответы с готовыми решениями:

Требуется написать функцию long long pow(long long a, unsigned int p), которая возводит число a в степень p
Требуется написать функцию long long pow(long long a, unsigned int p), которая возводит число a в степень p и возвращает ap. Помогите...

Не понятный undefined reference to `unsigned long long f<unsigned long long, void>
test.cpp: #include &lt;iostream&gt; template &lt;typename FormalType, typename FactType = typename std::enable_if&lt;std::is_same&lt;FormalType,...

Чем различаются long long и long double?
long long или long double

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.03.2019, 11:03
Помогаю со студенческими работами здесь

Data too long for column 'Rights'
таблица Deactivated DATETIME, Rights bit(8) Not NUll, Mobile VARCHAR(120), запрос $bitSet = b'10000000';

Ошибка Data too long for column 'Rights'
Rights bit(8) Yes &lt;em&gt;NULL&lt;/em&gt; $perms = new bitmask(); $perms-&gt;permissions = true; $perms-&gt;permissions = true; ...

Data too long for column 'raw_content' at row
Тип поля TEXT, строка не длиннее других загруженных (обычный контент веб странички)и тут вот... Может это быть связано с чем-то другим, а...

ORA-00932: inconsistent datatypes: expected - got LONG
При проверке обнаружился не валидный объект DBMV_TRIGGERS При перекомпиляции выдает ORA-04020: deadlock detected while trying to lock...

Long и ORA-06502: PL/SQL: numeric or value error
Люди, подкажите, делаю на разных машинах одно и тоже: на одних работает на других выходит ORA-06502: PL/SQL: numeric or value error ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru