sqlldr ORA-01722: неверный номер из-за десятичного числа в столбце csv

В следующем решении используется язык выражения SQLAlchemy и работает с SQLAlchemy 1.1. Это решение не смешивает параметры с запросом (в соответствии с запросом оригинального автора), но предоставляет способ использования моделей SQLAlchemy для генерации строк SQL-запросов и словарей параметров для разных диалектов SQL. Пример основан на учебнике http://docs.sqlalchemy.org/en/rel_1_0/core/tutorial.html

. Учитывая класс,

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class foo(Base):
    __tablename__ = 'foo'
    id = Column(Integer(), primary_key=True)
    name = Column(String(80), unique=True)
    value = Column(Integer())

мы можем создать оператор запроса с помощью функции select.

from sqlalchemy.sql import select    
statement = select([foo.name, foo.value]).where(foo.value > 0)

Далее мы можем скомпилировать оператор в объект запроса.

query = statement.compile()

По умолчанию, оператор компилируется с использованием базовой реализации «named», которая совместима с базами данных SQL, такими как SQLite и Oracle. Если вам нужно указать диалект, такой как PostgreSQL, вы можете сделать

from sqlalchemy.dialects import postgresql
query = statement.compile(dialect=postgresql.dialect())

. Если вы хотите явно указать диалект как SQLite, вы можете изменить paramstyle с «qmark» на «named».

from sqlalchemy.dialects import sqlite
query = statement.compile(dialect=sqlite.dialect(paramstyle="named"))

Из объекта запроса мы можем извлечь строку запроса и параметры запроса

query_str = str(query)
query_params = query.params

и, наконец, выполнить запрос.

conn.execute( query_str, query_params )

0
задан Romeo Ninov 18 January 2019 в 12:03
поделиться

1 ответ

Если ваш столбец определен как число (10), он должен быть округлен до 3 при вставке. Я подозреваю, что ваши реальные данные больше, чем 2,58. В любом случае, ваш столбец должен быть определен как число (12,2), то есть всего 12 цифр, 2 из которых слева от десятичной точки. то есть 9999999999,99

0
ответ дан Gary_W 18 January 2019 в 12:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: