import cx_Oracle
import pandas as pd
import random
import numpy as np
oracle數據庫update時候不能使用%s做占位符
def update_oracle():
conn = cx_Oracle.connect('test/123456@Ip:1521/test')
sql_str = """
select t.id,t.standard_id,t.standard_name
from sq_standard t
"""
df = pd.read_sql_query(sql_str,conn)
#df.info()
df.iloc[:2,:5]
df.iloc[:,1] = df.iloc[:,1].map(lambda x: x[:-6])#更改 遍歷所有號都加了bym
df[:,:1]
sr = df.iloc[:1,1:2]
sr[:-6]
#axis=1表示沿着x的方向,axis=0沿着y軸方向
#修改某一列的數據
#df['WLBM'].map(lambda x : x +'BYM')#給這一列數據拼接字符串
df.loc['JZ90159201002']
#data.columns = ['WLBM','CGBM']
data.replace(np.nan, '--', inplace = True)
# 建立游標
cursor = conn.cursor()
flag_List = df.iloc[:,1].values.tolist() #要修改的值
id_list = df.iloc[:,0].values.tolist() # id list
commit_id_list = [(id_list[i], flag_List[i]) for i in range(len(id_list))]
commit_id_list = [(flag_List[i], id_list[i]) for i in range(len(id_list))]
with conn.cursor() as cursor:
try:
#sql = "update sq_standard SET standard_id=(%s) where id=(%s)"
sql = "update sq_standard SET standard_id=(:1) where id=(:2)"
# sql = "update sq_standard set "
print('00000000000')
cursor.executemany(sql, commit_id_list) # commit_id_list上面已經說明
print('hihihihihihihi')
conn.commit()
print('執行結束!!!')
except Exception as e:
print('產生異常!!!',e)
conn.rollback()
conn.close()
return 'OK';
學習筆記
df.loc[:,['WLBM']]#根據標簽進行取值
df.iloc[:5,:1]#根據位置,位置就是行數列數,都是從0開始的
df.iloc[0]
df[:3]
df.iloc[[0,2]]#取的是第一行和第三行
df.iloc[:,[0,1]]#取的是第一列,第二列
df.iloc[:,[0]]#取的是第一列
df.iloc[[0]]#取的是第一行
df['WLBM']#取的是某一列
df.loc[:,'WLBM']#根據列名取的某一列值
df.iloc[[1,3],[0,1]]#根據位置直接取第二行和第三行,對應的列為第一列,第二列的值。
if name == 'main':
update_oracle()