1
database 討論版 / Python & MySQL 抓 OCS Inventory 資料庫問題
« 於: 2018-01-26 16:59 »
先聲明;下列程式是從網路上抄來的
原先的程式是將所有人的電腦設備資料寫入同一 Google 試算表分頁,但我想將它改寫成依使用者寫入不同的分頁。
目前遇到的問題是在 MySQL select 語法時無法將GsheetName變數代入
但將 GsheetName 換成固定的字串是可以執行的,會產生每個使用者的試算表分頁,但因為 select 是同一使用者名稱,
當然 select 出來、填入的資料也是同一人的資料。
def DB_return(exec_cmd):
connection = mysqldb.connect('localhost', 'ocs', 'passwd', 'ocsdb',charset='utf8');
with connection:
cursor = connection.cursor()
cursor.execute(exec_cmd)
rows_info = cursor.fetchall()
return rows_info
.........................................
.........................................
省略
connection = mysqldb.connect('localhost', 'ocs', 'passwd', 'ocsdb',charset='utf8');
with connection:
cursor = connection.cursor()
cursor.execute("SELECT * FROM accountinfo")
numrows = int(cursor.rowcount)
for i in range(numrows):
row = cursor.fetchone()
GsheetName = row[1] ////抓出使用者 TAG 名稱指定給 GsheetName 使用者變數
rows_accest = DB_return("SELECT DISTINCT \
A.HARDWARE_ID,A.TAG,H.NAME,H.PROCESSORT,H.MEMORY,S.DISKSIZE,M.CAPTION,SF.NAME \
from accountinfo as A \
join hardware as H \
join monitors as M \
join storages as S \
join softwares as SF \
where \
A.HARDWARE_ID=H.ID \
and A.HARDWARE_ID=S.HARDWARE_ID \
and S.TYPE='Fixed hard disk media' \
and A.HARDWARE_ID=M.HARDWARE_ID \
and A.HARDWARE_ID=SF.HARDWARE_ID \
and A.HARDWARE_ID=H.ID \
and SF.NAME not like '%Hotfix%' \
and SF.NAME not like '%Update%' \
and A.TAG like GsheetName") ////select 時無法將變數代入,換成固定的字串是可以的
GSheet_write(GSpreadSheet,GDriveJSON,rows_account_desc,rows_accest,GsheetName) ////這裡的 GsheetName 是可以代入變數,產生不同的使用者分頁
出現的錯誤訊息:
Traceback (most recent call last):
File "OcsAssetUpGoogleExcel2.py", line 137, in <module>
and A.TAG like GsheetName")
File "OcsAssetUpGoogleExcel2.py", line 12, in DB_return
cursor.execute(exec_cmd)
File "/usr/lib64/python2.7/site-packages/MySQLdb/cursors.py", line 205, in execute
self.errorhandler(self, exc, value)
File "/usr/lib64/python2.7/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
_mysql_exceptions.OperationalError: (1054, "Unknown column 'GsheetName' in 'where clause'")
請大家幫忙,要如何修改才能在 select 時,代入使用者變數?
原先的程式是將所有人的電腦設備資料寫入同一 Google 試算表分頁,但我想將它改寫成依使用者寫入不同的分頁。
目前遇到的問題是在 MySQL select 語法時無法將GsheetName變數代入
但將 GsheetName 換成固定的字串是可以執行的,會產生每個使用者的試算表分頁,但因為 select 是同一使用者名稱,
當然 select 出來、填入的資料也是同一人的資料。
def DB_return(exec_cmd):
connection = mysqldb.connect('localhost', 'ocs', 'passwd', 'ocsdb',charset='utf8');
with connection:
cursor = connection.cursor()
cursor.execute(exec_cmd)
rows_info = cursor.fetchall()
return rows_info
.........................................
.........................................
省略
connection = mysqldb.connect('localhost', 'ocs', 'passwd', 'ocsdb',charset='utf8');
with connection:
cursor = connection.cursor()
cursor.execute("SELECT * FROM accountinfo")
numrows = int(cursor.rowcount)
for i in range(numrows):
row = cursor.fetchone()
GsheetName = row[1] ////抓出使用者 TAG 名稱指定給 GsheetName 使用者變數
rows_accest = DB_return("SELECT DISTINCT \
A.HARDWARE_ID,A.TAG,H.NAME,H.PROCESSORT,H.MEMORY,S.DISKSIZE,M.CAPTION,SF.NAME \
from accountinfo as A \
join hardware as H \
join monitors as M \
join storages as S \
join softwares as SF \
where \
A.HARDWARE_ID=H.ID \
and A.HARDWARE_ID=S.HARDWARE_ID \
and S.TYPE='Fixed hard disk media' \
and A.HARDWARE_ID=M.HARDWARE_ID \
and A.HARDWARE_ID=SF.HARDWARE_ID \
and A.HARDWARE_ID=H.ID \
and SF.NAME not like '%Hotfix%' \
and SF.NAME not like '%Update%' \
and A.TAG like GsheetName") ////select 時無法將變數代入,換成固定的字串是可以的
GSheet_write(GSpreadSheet,GDriveJSON,rows_account_desc,rows_accest,GsheetName) ////這裡的 GsheetName 是可以代入變數,產生不同的使用者分頁
出現的錯誤訊息:
Traceback (most recent call last):
File "OcsAssetUpGoogleExcel2.py", line 137, in <module>
and A.TAG like GsheetName")
File "OcsAssetUpGoogleExcel2.py", line 12, in DB_return
cursor.execute(exec_cmd)
File "/usr/lib64/python2.7/site-packages/MySQLdb/cursors.py", line 205, in execute
self.errorhandler(self, exc, value)
File "/usr/lib64/python2.7/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
_mysql_exceptions.OperationalError: (1054, "Unknown column 'GsheetName' in 'where clause'")
請大家幫忙,要如何修改才能在 select 時,代入使用者變數?