Не удается вставить данные в таблицу Oracle с помощью python

#python #sql #oracle

Вопрос:

Я собираюсь вставить данные в таблицу, которая в Oracle используется python. Это не дало мне никакой ошибки, но и ничего не добавило в мою таблицу в Oracle SQL Developer. Также я написал запрос, чтобы получить select в моей таблице в среде python, это дало мне результат.

Мой CREATE TABLE код:

 cursor = conn.cursor()
cursor.execute("CREATE TABLE INSERT_TEST(FISRT_COLUMN VARCHAR2(30),SECOND_COLUMN NUMBER(10,2))")
 

Мой INSERT код:

 cursor = conn.cursor()

data = [
('Mina', 20),
('Minoo', 32),
('Sara', 22),
('Ehssan', 25),
('Ladan', 55)
]

for row in data:
     cursor.execute("""
          insert into INSERT_TEST (FISRT_COLUMN, SECOND_COLUMN)
          values (:1, :2)""", row)
 

Мой SELECT вопрос:

 re = cursor.execute("select * from INSERT_TEST")

for row in re:
    print(row)
 

Мои выходные данные в среде python:

('Mina', 20.0) ('Minoo', 32.0) ('Sara', 22.0) ('Ehssan', 25.0) ('Ladan', 55.0)

Мои выходные данные в Oracle SQL Developer пусты!

Комментарии:

1. Oracle SQL Developer-это бесплатная интегрированная среда разработки . Таблица отсутствует в среде IDE, это объект базы данных. Чтобы сделать ваши изменения постоянными в SQL, вам необходимо зафиксировать их в конце сеанса.

2. Я ставил commit; это раньше, но это дает мне name 'commit' is not defined ошибку.

3. Помимо проблемы, вам лучше использовать cursor.executemany(stmt, list) вместо цикла, так как он питонический и более быстрый

4. Но ваш код не содержит commit

5. здесь нет, я уже говорил раньше. Я удаляю фиксацию; это дало мне ошибку, и я написал ошибку, затем я удаляю это и задаю свою проблему здесь.

Ответ №1:

Я понимаю, что это зависит от таблицы в oracle SQL developer, конца моего кода, который я должен написать cursor.execute('commit') , чтобы показать, что он заканчивается, и вставить все данные в мою таблицу.

Ответ №2:

Я думаю, что вам нужно conn.commit() в конце вашей программы. commit принадлежит к connection классу, а не к cursor своему .

Ответ №3:

Проверьте документацию для драйвера вашей базы данных.

  • Для некоторых драйверов баз данных поведение по умолчанию COMMIT связано с любыми незафиксированными данными при закрытии транзакции и соединения; поэтому убедитесь, что вы закрыли соединение после завершения.
  • Для других драйверов баз данных поведение по умолчанию относится к ROLLBACK любым незафиксированным данным при закрытии транзакции и соединения; в этом случае вам потребуется явно COMMIT указать данные перед закрытием соединения, иначе это приведет ROLLBACK к вашим изменениям.

База данных Oracle не пускает других сеансов (даже принадлежащих одному и тому же пользователю) видеть незафиксированные данные, поэтому, если вы INSERT из Python, но не COMMIT (прямо или, если драйвер поддерживает это, неявно, когда вы закрываете соединение), то вы сможете видеть его у питона сессии, где был создан данных, но это будет скрыто, когда вы просматриваете его в другом сеансе (т. е. от разработчика SQL).