簡體   English   中英

使用python插入Oracle表列

[英]Insert into oracle table columns using python

很抱歉,如果這是重復的; 我嘗試搜索Google和以前的Stack Overflow問題,但找不到答案。

連接代碼:

import cx_Oracle as o
con = o.connect('**', '**', '**')
con.version
cur = con.cursor()

加載DF的代碼:

import pandas as pd
df = pd.read_excel("filename.xlsx")

df有兩列, COLUMN1是7位數字, COLUMN2是字符串

我有一個名為' MARSHALLTEST '的Oracle表,具有COLUMN1 number(7)COLUMN2 varchar(200)並且我想在該表中INSERT INTO適當的列。

這給我一個錯誤消息:

rows = [tuple(x) for x in df.values]
cur.executemany('''INSERT INTO MARSHALLTEST (COLUMN1, COLUMN2) VALUES (:0,:1)''',rows)
con.commit()

錯誤信息:

---------------------------------------------------------------------------
UnicodeEncodeError                        Traceback (most recent call last)
<ipython-input-6-c4f7ad8118fd> in <module>()
      1 #statement = 'insert into MARSHALLTEST (OPPORTUNITY_INVOICE) values (df1)'
      2 rows = [tuple(x) for x in df.values]
----> 3 cur.executemany('''INSERT INTO MARSHALLTEST ('OPPORTUNITY_INVOICE', 'SF_OPP_ID') VALUES (:0,:1)''',rows)
      4 con.commit()

UnicodeEncodeError: 'ascii' codec can't encode character '\u201a' in position 22: ordinal not in range(128)

我也嘗試過這個:

for s in df:
    statement = 'insert into MARSHALLTEST (OPPORTUNITY_INVOICE, SF_OPP_ID) values (s)' 
    cur.execute(statement)
    con.commit()

錯誤信息:

DatabaseError                             Traceback (most recent call last)
<ipython-input-15-2c2e69dfd9bf> in <module>()
      1 for s in df:
      2         statement = 'insert into MARSHALLTEST (OPPORTUNITY_INVOICE, SF_OPP_ID) values (s)'
----> 3         cur.execute(statement)
      4         con.commit()

DatabaseError: ORA-00947: not enough values

您可以使用以下代碼將數據框直接保存到表中:import cx_Oracle

從sqlalchemy導入類型,create_engine

newconn = create_engine('oracle + cx_oracle:// username:pswd @ host:port /?service_name = xxx')

df.to_sql('testtablex',newconn,if_exists ='replace',index = False)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM