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 sys
import pandas as pd
import numpy as np
import 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 Time
def 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 Tasks
def 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/O
def 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/Sec
def 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 Used
def 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) # Ethernet
def 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 Connections
def 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 Sizes
fsgb= "{}{}".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)) Total
FROM (SELECT TABLESPACE_NAME, SUM(BYTES) BYTES
FROM dba_data_files
GROUP BY TABLESPACE_NAME) DBFiles,
(SELECT TABLESPACE_NAME, SUM(BYTES) BYTES,
MAX(BYTES) largest
FROM dba_free_space
GROUP BY TABLESPACE_NAME) DBFree
WHERE 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 sys
import pandas as pd
import numpy as np
import 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 Time
def 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 Tasks
def 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/O
def 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/Sec
def 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 Used
def 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) # Ethernet
def 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 Connections
def 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 Sizes
fsgb= "{}{}".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)) Total
FROM (SELECT TABLESPACE_NAME, SUM(BYTES) BYTES
FROM dba_data_files
GROUP BY TABLESPACE_NAME) DBFiles,
(SELECT TABLESPACE_NAME, SUM(BYTES) BYTES,
MAX(BYTES) largest
FROM dba_free_space
GROUP BY TABLESPACE_NAME) DBFree
WHERE 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)) Total
FROM (SELECT TABLESPACE_NAME, SUM(BYTES) BYTES
FROM dba_data_files
GROUP BY TABLESPACE_NAME) DBFiles,
(SELECT TABLESPACE_NAME, SUM(BYTES) BYTES,
MAX(BYTES) largest
FROM dba_free_space
GROUP BY TABLESPACE_NAME) DBFree
WHERE 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)) Total
FROM (SELECT TABLESPACE_NAME, SUM(BYTES) BYTES
FROM dba_data_files
GROUP BY TABLESPACE_NAME) DBFiles,
(SELECT TABLESPACE_NAME, SUM(BYTES) BYTES,
MAX(BYTES) largest
FROM dba_free_space
GROUP BY TABLESPACE_NAME) DBFree
WHERE 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.