【发布时间】:2021-10-31 06:33:37
【问题描述】:
我在我的 python 脚本中导入了一个 txt 文件,然后将其转换为数据框。然后我创建了一个函数,它使用 cx_oracle 更快地将我的数据插入到 Oracle 数据库中。它工作得很好,只需要 15 分钟即可导入 100 万+ 个数据 - 但它不会按原样复制值。这是该代码的一部分:
sqlquery = 'INSERT INTO {} VALUES({})'.format(tablename, inserttext)
df_list = df.values.tolist()
cur = con.cursor()
cur.execute(sql_query1)
logger.info("Completed: %s", sql_query1)
for b in df_list :
for index, value in enumerate(b):
if isinstance(value, float) and math.isnan(value):
b[index] = None
elif isinstance(value, type(pd.NaT)):
b[index] = None
这是我所期望的示例数据:
| DATE | STORE | COST | PARTIAL |
|---|---|---|---|
| 16-JUN-21 08.00.00.000000000 PM | 00006 | +00000.0082 | false |
但这是被导入的
| DATE | STORE | COST | PARTIAL |
|---|---|---|---|
| 16-JUN-21 | 6 | 0.0082 | F |
我需要它与零、符号等完全相同。我已经尝试通过 df = df.astype(str) 将数据帧转换为字符串,但它不起作用。
希望你能帮忙!
【问题讨论】:
-
我建议在导入之前将表上的列数据类型更改为字符串,因为 python 对数据类型进行了假设。
-
如果要存储字符串,请将所有 Oracle 数据库列类型设为 VARCHAR2。
-
是的,所有列都在字符串中,这就是为什么我也不确定为什么它不只是采用我导入的格式。
标签: python oracle scripting spyder cx-oracle