如何在表中插入变量值?

问题描述 投票:0回答:1

假设我有以下file.csv

DATE    Name    Email
26-Sep-19   Name1   [email protected] 
26-Sep-19   Name2   [email protected] 
26-Sep-19   Name3   [email protected] 

我正在尝试将file.csv中的值插入表中

import cx_Oracle
import csv
import os
from datetime import datetime

con = cx_Oracle.connect(uname, pwd, hostname + ': ' + port + '/' + service)
cursor = con.cursor()

with open('file.csv', 'r') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')
    for lines in csv_reader:
        cursor.execute( "INSERT INTO table1 ( DATE,Name,Email) values (:1, :2, :3)", 
        (lines[0],lines[1],lines[2])  
cursor.close()
con.commit()
con.close()

我收到此错误:

(lines [0],lines [1],lines [2])cx_Oracle.DatabaseError:ORA-01858:a在需要数字的地方找到了非数字字符

经过一些调试后,我能够将其归因于日期问题,因此,我代替了行[0],而是用硬编码的日期代替了,并且有效!

cursor.execute( "INSERT INTO table1 ( DATE,Name,Email) values (:1, :2, :3)", 
('26-Sep-19',lines[1],lines[2])  

为什么它不与lines[0]变量一起使用,但具有硬编码的值却可以正常工作?

python-2.6 cx-oracle
1个回答
0
投票

您的日期的字符串格式必须与Oracle期望的匹配。您可以为会话设置NLS_DATE_FORMAT参数,也可以直接修改代码以执行类似以下操作:

cursor.execute("""
        insert into table1 (date, name, email)
        values (to_date(:1, 'dd-Mon-YY'), :2, :3)""",
        (lines[0], lines[1], lines[2]))
© www.soinside.com 2019 - 2024. All rights reserved.