Python Oracle Sorgu Hatası
-
selamlar.
dbden veri okuyup, excele yazacak ve excel içerisinde de bazı hücreleri random olarak değer atayacak program yazmak istiyorum. python'a merak saldigim icin ugrasiyorum, bahanesi oldu. is yeri icin surekli kalite belgeleri cikartmak gerekiyor ve can sıktı.
gelelim konuya. aşağıda kod herşeyiyle çalışıyor. en aşağıdaki plsql sorgusu da db'de çalışıyor fakat kodun içerisinde "Invalid syntax" hatası veriyor. O sorgu yerine tek satır, basit bir sorgu yazdığımda değerler geliyor.
Hata veren satırı kalın olarak işaretledim. neden olabilir? ugrasiyorum fakat bulamadım.
db: oracle. derleyici: Spyder (Python 3.9 ile kullanıyorum)
aşağıdaki linkten de inceleyebilirsiniz. satır 73.
import sysimport pandas as pdimport numpy as npimport cx_Oracle#cx_Oracle.init_oracle_client(lib_dir=r"C:\instant_client\instantclient_21_3")dsn_tns = cx_Oracle.makedsn('IP', 'Port', service_name='SN')conn = cx_Oracle.connect(user=r'USR', password='PSW', dsn=dsn_tns)c = conn.cursor()def oku(filename, column="C", row=7):return pd.read_excel(filename, skiprows=row - 0, usecols=column, nrows=1, header=None, names=["Value"]).iloc[0]["Value"]varCPU = oku("Test.xlsx","C",7) #Processor Timedef oku(filename, column="D", row=7):return pd.read_excel(filename, skiprows=row - 0, usecols=column, nrows=1, header=None, names=["Value"]).iloc[0]["Value"]varWT = oku("Test.xlsx","D",7) # Waiting Tasksdef oku(filename, column="E", row=7):return pd.read_excel(filename, skiprows=row - 0, usecols=column, nrows=1, header=None, names=["Value"]).iloc[0]["Value"]varDBIO = oku("Test.xlsx","E",7) # Database I/Odef oku(filename, column="F", row=7):return pd.read_excel(filename, skiprows=row - 0, usecols=column, nrows=1, header=None, names=["Value"]).iloc[0]["Value"]varBR = oku("Test.xlsx","F",7) # Batch Requests/Secdef oku(filename, column="H", row=7):return pd.read_excel(filename, skiprows=row - 0, usecols=column, nrows=1, header=None, names=["Value"]).iloc[0]["Value"]varMU = oku("Test.xlsx","H",7) # Memory Useddef oku(filename, column="I", row=7):return pd.read_excel(filename, skiprows=row - 0, usecols=column, nrows=1, header=None, names=["Value"]).iloc[0]["Value"]varETH = oku("Test.xlsx","I",7) # Ethernetdef oku(filename, column="J", row=7):return pd.read_excel(filename, skiprows=row - 0, usecols=column, nrows=1, header=None, names=["Value"]).iloc[0]["Value"]varUSC = oku("Test.xlsx","J",7) # Users Connectionsdef oku(filename, column="L", row=7):return pd.read_excel(filename, skiprows=row - 0, usecols=column, nrows=1, header=None, names=["Value"]).iloc[0]["Value"]varFS = oku("Test.xlsx","L",7) # Datafile Sizesfsgb= "{}{}".format(varFS,"GB")print(varCPU)print(varWT)print(varDBIO)print(varBR)print(varMU)print(varETH)print(varUSC)print(fsgb)c.execute("""'SELECT SUM(ROUND(DBFiles.BYTES / 1024000)) TotalFROM (SELECT TABLESPACE_NAME, SUM(BYTES) BYTESFROM dba_data_filesGROUP BY TABLESPACE_NAME) DBFiles,(SELECT TABLESPACE_NAME, SUM(BYTES) BYTES,MAX(BYTES) largestFROM dba_free_spaceGROUP BY TABLESPACE_NAME) DBFreeWHERE DBFiles.TABLESPACE_NAME = DBFree.TABLESPACE_NAME and DBFiles.TABLESPACE_NAME in ('NUCL_DATA','NUCL_NDX')"""for row in c:print (row[0], '-', row[1])# -*- coding: utf-8 -*-import sysimport pandas as pdimport numpy as npimport cx_Oracle#cx_Oracle.init_oracle_client(lib_dir=r"C:\instant_client\instantclient_21_3")dsn_tns = cx_Oracle.makedsn('IP', 'Port', service_name='SN')conn = cx_Oracle.connect(user=r'USR', password='PSW', dsn=dsn_tns)c = conn.cursor()def oku(filename, column="C", row=7):return pd.read_excel(filename, skiprows=row - 0, usecols=column, nrows=1, header=None, names=["Value"]).iloc[0]["Value"]varCPU = oku("Test.xlsx","C",7) #Processor Timedef oku(filename, column="D", row=7):return pd.read_excel(filename, skiprows=row - 0, usecols=column, nrows=1, header=None, names=["Value"]).iloc[0]["Value"]varWT = oku("Test.xlsx","D",7) # Waiting Tasksdef oku(filename, column="E", row=7):return pd.read_excel(filename, skiprows=row - 0, usecols=column, nrows=1, header=None, names=["Value"]).iloc[0]["Value"]varDBIO = oku("Test.xlsx","E",7) # Database I/Odef oku(filename, column="F", row=7):return pd.read_excel(filename, skiprows=row - 0, usecols=column, nrows=1, header=None, names=["Value"]).iloc[0]["Value"]varBR = oku("Test.xlsx","F",7) # Batch Requests/Secdef oku(filename, column="H", row=7):return pd.read_excel(filename, skiprows=row - 0, usecols=column, nrows=1, header=None, names=["Value"]).iloc[0]["Value"]varMU = oku("Test.xlsx","H",7) # Memory Useddef oku(filename, column="I", row=7):return pd.read_excel(filename, skiprows=row - 0, usecols=column, nrows=1, header=None, names=["Value"]).iloc[0]["Value"]varETH = oku("Test.xlsx","I",7) # Ethernetdef oku(filename, column="J", row=7):return pd.read_excel(filename, skiprows=row - 0, usecols=column, nrows=1, header=None, names=["Value"]).iloc[0]["Value"]varUSC = oku("Test.xlsx","J",7) # Users Connectionsdef oku(filename, column="L", row=7):return pd.read_excel(filename, skiprows=row - 0, usecols=column, nrows=1, header=None, names=["Value"]).iloc[0]["Value"]varFS = oku("Test.xlsx","L",7) # Datafile Sizesfsgb= "{}{}".format(varFS,"GB")print(varCPU)print(varWT)print(varDBIO)print(varBR)print(varMU)print(varETH)print(varUSC)print(fsgb)c.execute("""'SELECT SUM(ROUND(DBFiles.BYTES / 1024000)) TotalFROM (SELECT TABLESPACE_NAME, SUM(BYTES) BYTESFROM dba_data_filesGROUP BY TABLESPACE_NAME) DBFiles,(SELECT TABLESPACE_NAME, SUM(BYTES) BYTES,MAX(BYTES) largestFROM dba_free_spaceGROUP BY TABLESPACE_NAME) DBFreeWHERE DBFiles.TABLESPACE_NAME = DBFree.TABLESPACE_NAME and DBFiles.TABLESPACE_NAME in ('NUCL_DATA','NUCL_NDX')"""for row in c:print (row[0], '-', row[1]) -
yok mu yardımcı olacak bir kişi?
-
select in başında ' işareti var pyton bilmiyorum ama orda olması hata gıbı duruyor
-
yok abi olması gerekiyor da hallettim.
-
c execute fonksiyonunun parantezini kapatmamışsın.
c.execute("""'SELECT SUM(ROUND(DBFiles.BYTES / 1024000)) TotalFROM (SELECT TABLESPACE_NAME, SUM(BYTES) BYTESFROM dba_data_filesGROUP BY TABLESPACE_NAME) DBFiles,(SELECT TABLESPACE_NAME, SUM(BYTES) BYTES,MAX(BYTES) largestFROM dba_free_spaceGROUP BY TABLESPACE_NAME) DBFreeWHERE DBFiles.TABLESPACE_NAME = DBFree.TABLESPACE_NAME and DBFiles.TABLESPACE_NAME in ('NUCL_DATA','NUCL_NDX')""")for row in c:print (row[0], '-', row[1]) -
FrodoTheYuzuksuz bunu yazdı
c execute fonksiyonunun parantezini kapatmamışsın.
c.execute("""'SELECT SUM(ROUND(DBFiles.BYTES / 1024000)) TotalFROM (SELECT TABLESPACE_NAME, SUM(BYTES) BYTESFROM dba_data_filesGROUP BY TABLESPACE_NAME) DBFiles,(SELECT TABLESPACE_NAME, SUM(BYTES) BYTES,MAX(BYTES) largestFROM dba_free_spaceGROUP BY TABLESPACE_NAME) DBFreeWHERE DBFiles.TABLESPACE_NAME = DBFree.TABLESPACE_NAME and DBFiles.TABLESPACE_NAME in ('NUCL_DATA','NUCL_NDX')""")for row in c:print (row[0], '-', row[1])evet, sorgunun sonunda kapatarak demiyordum, dalgınlık. Tırnaklardan sonra kapatınca düzeldi şimdi cx_oracle ile ilgili farkı sorun var:)
-
cx_oracle ilgili sorunun malum olmasını mı bekleyeceğiz şimdi? Söylesene abi problemi :D
-
FrodoTheYuzuksuz bunu yazdı
cx_oracle ilgili sorunun malum olmasını mı bekleyeceğiz şimdi? Söylesene abi problemi :D
mobilden yazdim, pc basinda degildim:) asagidaki hatayi veriyor.
File ~\Desktop\Excel.py:7 in <module>
cx_Oracle.init_oracle_client(lib_dir=r"C:\instant_client\instantclient_21_3")ProgrammingError: Oracle Client library has already been initialized
-
Anladım abi :D
GitHub da flaan baktım da try bloğunu kullanın diyor
7. satırı şu şekilde değiştirin;
try: cx_Oracle.init_oracle_client(lib_dir=r"C:\instant_client\instantclient_21_3") except: pass
Girinti bozuluyor, sen düzenlersin hocam.
