Уведомления

Группа в Telegram: @pythonsu

#1 Май 12, 2015 18:44:13

ZlobnayaPechenka
Зарегистрирован: 2015-05-12
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Не проходит insert в базу

Всем привет. Пытаюсь с помощью python сделать insert записей в таблицу Oracle. Скрипт отрабатывает, но никаких записей не появляется. Уже перепробовала кучу вариантов, никак не получается.

con = cx_Oracle.connect('user/pass@127.0.0.1/mybase')
cur = con.cursor()
example = {
    "id": "8",
    "name": "example",
    "datatim": datetime.datetime.now()
    }
cur.execute
( "insert into table (ID_FILE, NAME_FILE, SYS_CREATION_DATE) values (:id, :name, :datatim)", example )
con.commit()
cur.close()
con.close()

Ткните носом, где напортачила

Офлайн

#2 Май 12, 2015 18:57:14

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Не проходит insert в базу

А так сработает?

example = {
    ":id": "8",
    ":name": "example",
    ":datatim": datetime.datetime.now()
    }



Офлайн

#3 Май 12, 2015 23:38:12

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 8667
Репутация: +  770  -
Профиль   Отправить e-mail  

Не проходит insert в базу

ZlobnayaPechenka
"datatim": datetime.datetime.now()
Попробуй обернуть:
str(datetime.datetime.now())



Офлайн

#4 Май 13, 2015 08:51:03

ZlobnayaPechenka
Зарегистрирован: 2015-05-12
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Не проходит insert в базу


FishHook
А так сработает?

не помогло, к сожалению(((
py.user.next
str(datetime.datetime.now())

ТОже не помогло. В базе эта колонка имеет значение date

Офлайн

#5 Май 13, 2015 09:04:28

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Не проходит insert в базу

Вот так точно должно сработать, иначе у вас где-то не в этом месте проблемы

example = [8, "example", datetime.datetime.now()]
cur.execute
( "insert into table (ID_FILE, NAME_FILE, SYS_CREATION_DATE) values (%s, %s, %s)", example )



Офлайн

#6 Май 13, 2015 10:03:35

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 8667
Репутация: +  770  -
Профиль   Отправить e-mail  

Не проходит insert в базу

ZlobnayaPechenka
В базе эта колонка имеет значение date
Но подавать нужно всё равно строку, а при взаимодействии с базой она преобразует её. Потому что модуль для работы с базой данных не знает о модуле для работы с датой-временем.

Я думаю, надо сначала проверить всё без подстановок.



Офлайн

#7 Май 13, 2015 11:06:05

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Не проходит insert в базу

py.user.next
Но подавать нужно всё равно строку, а при взаимодействии с базой она преобразует её. Потому что модуль для работы с базой данных не знает о модуле для работы с датой-временем.
cx_Oracle сам знает, как ему преобразовывать дату в строку, ровно как и другие типы данных. Клиента это вообще не должно интересовать. Уверяю вас, вы не правы.



Офлайн

#8 Май 13, 2015 13:39:35

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 8667
Репутация: +  770  -
Профиль   Отправить e-mail  

Не проходит insert в базу

FishHook
cx_Oracle сам знает, как ему преобразовывать дату в строку
Посмотрел исходники, он там соединён с datetime напрямую. Лучше, конечно, через простой текст связывать (связывание по данным), иначе возникает связывание по формату и изменение datetime повлечёт изменение cx_Oracle.



Отредактировано py.user.next (Май 13, 2015 13:42:33)

Офлайн

#9 Май 13, 2015 14:05:55

ZlobnayaPechenka
Зарегистрирован: 2015-05-12
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Не проходит insert в базу

Пробовала делать инсерт в другую таблицу, по шаблону

create table mytab (id number, data varchar2(20));
import cx_Oracle
con = cx_Oracle.connect('pythonhol/welcome@127.0.0.1/orcl')
rows = [ (1, "First" ),
         (2, "Second" ),
         (3, "Third" ),
         (4, "Fourth" ),
         (5, "Fifth" ),
         (6, "Sixth" ),
         (7, "Seventh" ) ]
cur = con.cursor()
cur.bindarraysize = 7
cur.setinputsizes(int, 20)
cur.executemany("insert into mytab(id, data) values (:1, :2)", rows)
con.commit()
cur.close()
сon.close()

У меня же в мою таблицу не инсертит. Таблица такого формата

create table "table" 
(ID_FILE number(5) constraint "FILE_ID" primary key,
NAME_FILE varchar2(256)
"SYS_CREATION_DATE" DATE CONSTRAINT "SYS_CREATION_DATE_NN" NOT NULL ENABLE);

Офлайн

#10 Май 13, 2015 14:09:24

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Не проходит insert в базу

ZlobnayaPechenka
А не проще все-таки глянуть в сторону какого-нибудь ОРМ. В этом случае всю ответственность за соответствие типам берет на себя он. Плюс решение будет платформонезависимым, т.е. с изменением базы можно будет менять только коннектор, а это одна строка

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version