最近開始學python,在資料庫讀取的部分使用pymysql
但發現pymysql 在select出來的資料是tuple,當我如php一樣對其陣列內容打入欄位名稱時會出現type Error,
TypeError: tuple indices must be integers or slices, not str
因為pymysql所存放的格式是長這樣的
(1264, 94, 2018, 11, 9, 5, 48, 12, 15, 14, 22, 4, 4, 12, 14, 15, 22, 48, 28)
這樣的話你就只能用array[0],array[1],array[2]...方式進行取值,在程式的可讀性上變得很差
理想的情形是array["year"] ,array["month"]這種對人類來有意義的文字,可讀性比較高
所以我的目標即把select 出來的內容轉成如下格式
{'serial': 1269, 'round': 99, 'year': 2018, 'month': 11, 'day': 27, 'week': 2, 'o1': 27, 'o2': 36, 'o3': 43, 'o4': 44, 'o5': 41, 'o6': 33, 's1': 27, 's2': 33, 's3': 36, 's4': 41, 's5': 43, 's6': 44, 'sp': 31}
---------------------------------------------------------------------------------------------------------------------
以下範例
例如在php,我從資料select出0~50的數字,當程式判斷該o1~o6欄的數字,並在相對位置的陣列位置的值+1,這樣就可以計算出每一個數字有幾個
ex:第一個row 的o1值為27,則在陣列的第27個位置的值+1
$str= "select * from raw_number where year='2018'";
$time_count=Array();
$i=0;
while($i<=50){
$time_count[]=0;
$i++;
}
$data=$db->query($str)->fetchAll();
foreach($data as $d){
$time_count[$d['o1']]+=1; //這寫法在php可以,但在pymysql無法
$time_count[$d['o2']]+=1;
$time_count[$d['o3']]+=1;
$time_count[$d['o4']]+=1;
$time_count[$d['o5']]+=1;
$time_count[$d['o6']]+=1;
$time_count[$d['sp']]+=1;
}
-----------------------------------------------------------------------------------
而在python,幾經google找尋後,pymysql 出來的資料可以使用map的方式把資料配對組好,組好後轉成list即可
雖然有點麻煩,但其實不過就是多寫二行
#cursor.description是列出欄位名稱,不熟的朋友可以直接print(cursor.description)看看
#new2dict函數,這個函數是自定義函數,也就是我寫來把欄位名稱和值配在一起用的
#接著下一行會使用map()這個函數把從資料庫fetchall()中所有的值和欄位配在一起
def new2dict(new):
return dict(zip([x[0] for x in cursor.description],[x for x in new]))
new_list = list(map(new2dict,cursor.fetchall()))
for i in new_list:
nu[i["o1"]]+=1 #o1
nu[i["o2"]]+=1 #o2
nu[i["o3"]]+=1 #o3
nu[i["o4"]]+=1 #o4
nu[i["o5"]]+=1 #o5
nu[i["o6"]]+=1 #o6
nu[i["sp"]]+=1 #sp
沒了....其實就是多了一個new2dict和map(),接下來的邏輯就和php差不多
jquery
2018年12月22日 星期六
2018年12月7日 星期五
Linux Ubuntu 上安裝Python 3 及 postgresql
[安裝]
在ubuntu上裝了最新的3.7版的python
命令列上隨意的打上
sudo apt-get install python3
一下子就裝好了
接著要裝pip ,pip可以用來下載python的套件(函式庫),
但請注意,這個pip要下載3.0版用的,在ubuntu上他叫python3-pip, 所以
sudo apt-get install python3-pip
裝好了後,少了database,剛好我python是新學的,於是想說一直以來除了mysql之外也沒有用過別家的
於是呼想起之前一直想學的Postgresql,好吧,那就裝吧
sudo apt-get install postgresql
於是,postgresql也就這樣裝好了
----------------------------------------------------------------------------------------------------------------
設定
1.首先,postgresql在安裝時會預設幫你創一個叫「postgres」的使用者
這個使用者被設定為postgresql最大的管理員(相當於root),但創建時的密碼是亂數,所以你必須先幫個這個postgres改系統密碼
sudo passwd postgre
2.改好之後切換到postgres這個使用者
su postgres
接著就可直接打上psql 這個指令,順利進入後你會看令命列postgres=#
3.由於安全因素,一般不建議大家使用postgres這個帳號進行日常維護
尤其這個帳號你知我知,寶傑西屏都知道,所以我們在此創立一個新的,他叫tom
密碼 1111,這個tom 必須是linux的user之一,因為postgresql所採用的peer認證的方式,所以除了db內建之外,linux也必須要建一個相同的user帳號,並 請一定要記得打完後要加一個分號
postgres=# create user tom with password '1111'; <--- br="">--->
4. 接著建立一個database 叫myshop
postgres=# create database myshop;
5. 把這個database 的權限指定給tom
postgres=#GRANT ALL PRIVILEGES ON DATABASE myshop TO tom;
然後,我以為這樣就結束了
但,我用TOM的帳號進去後發現無法創建資料表及INSERT資料
上網一查發現,TABLE也必須GRANT,所以
6.指定TABLE權限給TOM
postgres=# GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA PUBLIC TO tom;
7. 建立一張table
create table lotto (serial int, o1 int,o2 int)
至此,postgresql的設定皆完成
接下來換PYTHON
1.首先裝上psycopg2
sudo apt-get install python3-psycopg2
2接著寫一個簡單的python 測試連線
import psycopg2
conn= psycopg2.connect("dbname=myshop user=tom password=1111 host=127.0.0.1")
cur=conn.cursor()
cur.execute("insert into lotto (14,15,16)")
conn.commit()
conn.close()
設定完了~~~!
---------------------------------------------------------------------------------------------------------------------
[備註]
如果其單純想創建資料庫使用者而不想多一個linux使用者的話,可以修改
/etc/postgresql/10/main/pg_hba.conf
將
local all all peer
改成
在ubuntu上裝了最新的3.7版的python
命令列上隨意的打上
sudo apt-get install python3
一下子就裝好了
接著要裝pip ,pip可以用來下載python的套件(函式庫),
但請注意,這個pip要下載3.0版用的,在ubuntu上他叫python3-pip, 所以
sudo apt-get install python3-pip
裝好了後,少了database,剛好我python是新學的,於是想說一直以來除了mysql之外也沒有用過別家的
於是呼想起之前一直想學的Postgresql,好吧,那就裝吧
sudo apt-get install postgresql
於是,postgresql也就這樣裝好了
----------------------------------------------------------------------------------------------------------------
設定
1.首先,postgresql在安裝時會預設幫你創一個叫「postgres」的使用者
這個使用者被設定為postgresql最大的管理員(相當於root),但創建時的密碼是亂數,所以你必須先幫個這個postgres改系統密碼
sudo passwd postgre
2.改好之後切換到postgres這個使用者
su postgres
接著就可直接打上psql 這個指令,順利進入後你會看令命列postgres=#
3.由於安全因素,一般不建議大家使用postgres這個帳號進行日常維護
尤其這個帳號你知我知,寶傑西屏都知道,所以我們在此創立一個新的,他叫tom
密碼 1111,這個tom 必須是linux的user之一,因為postgresql所採用的peer認證的方式,所以除了db內建之外,linux也必須要建一個相同的user帳號,並 請一定要記得打完後要加一個分號
postgres=# create user tom with password '1111'; <--- br="">--->
4. 接著建立一個database 叫myshop
postgres=# create database myshop;
5. 把這個database 的權限指定給tom
postgres=#GRANT ALL PRIVILEGES ON DATABASE myshop TO tom;
然後,我以為這樣就結束了
但,我用TOM的帳號進去後發現無法創建資料表及INSERT資料
上網一查發現,TABLE也必須GRANT,所以
6.指定TABLE權限給TOM
postgres=# GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA PUBLIC TO tom;
7. 建立一張table
create table lotto (serial int, o1 int,o2 int)
至此,postgresql的設定皆完成
接下來換PYTHON
1.首先裝上psycopg2
sudo apt-get install python3-psycopg2
2接著寫一個簡單的python 測試連線
import psycopg2
conn= psycopg2.connect("dbname=myshop user=tom password=1111 host=127.0.0.1")
cur=conn.cursor()
cur.execute("insert into lotto (14,15,16)")
conn.commit()
conn.close()
設定完了~~~!
---------------------------------------------------------------------------------------------------------------------
[備註]
如果其單純想創建資料庫使用者而不想多一個linux使用者的話,可以修改
/etc/postgresql/10/main/pg_hba.conf
將
local all all peer
改成
2018年10月23日 星期二
N1 文法 が早いか/そばから/なり/や否や/たとたん 的差別
最近報考N1,念書過程中發現這幾個類似的文法很接近
1.が早いか
2.そばから
3.なり
4.や否や
5.た途端
這個幾個的意思都是「馬上」或「立刻」,但偏偏他是有一點點差別的,以下整理一下差在哪
1.が早いか
3.なり
這二個基本上同意思,表示「前項發生後,後面接著發生」,
1.ベルが鳴るが早いか、彼は教室を飛び出した
3.電話を切るなり、彼女は家を飛び出した。
鈴響了之後才出去,電話掛了才出去,這二個句型表示急忙發生的事
-----------------------------
2.そばから
意思為「每次...馬上」,這個每當很重要,因為此句型用來表示重複發生的事
像是
i.每次洗完車就馬上下雨
ii. 每次掃完地又掉一堆落葉
例:
a. 最近、人の名前を聞いたそばから、どんどん忘れてしまう。 (最近每次一聽別人的名字後馬上就忘了)
-----------------------------
4.や否や
如果用來表示習慣動作,後面用現在式;表示既定事實,用過去式
此句型日常生活幾乎沒人說,但會出現在文書用語,
差別是,沒有緊急感,
a. 試験開始のベルが鳴るや否や、学生たちはいっせいに書き始めた。
---------------------
5.たとたん
此為二級文法,但一樣是表馬上,此句型後面常用來表示意外發生的事
例如,我早上一開門,一堆沙子馬上飄進來(意料之外)
1.が早いか
2.そばから
3.なり
4.や否や
5.た途端
這個幾個的意思都是「馬上」或「立刻」,但偏偏他是有一點點差別的,以下整理一下差在哪
1.が早いか
3.なり
這二個基本上同意思,表示「前項發生後,後面接著發生」,
1.ベルが鳴るが早いか、彼は教室を飛び出した
3.電話を切るなり、彼女は家を飛び出した。
鈴響了之後才出去,電話掛了才出去,這二個句型表示急忙發生的事
-----------------------------
2.そばから
意思為「每次...馬上」,這個每當很重要,因為此句型用來表示重複發生的事
像是
i.每次洗完車就馬上下雨
ii. 每次掃完地又掉一堆落葉
例:
a. 最近、人の名前を聞いたそばから、どんどん忘れてしまう。 (最近每次一聽別人的名字後馬上就忘了)
-----------------------------
4.や否や
如果用來表示習慣動作,後面用現在式;表示既定事實,用過去式
此句型日常生活幾乎沒人說,但會出現在文書用語,
差別是,沒有緊急感,
a. 試験開始のベルが鳴るや否や、学生たちはいっせいに書き始めた。
---------------------
5.たとたん
此為二級文法,但一樣是表馬上,此句型後面常用來表示意外發生的事
例如,我早上一開門,一堆沙子馬上飄進來(意料之外)
2018年10月9日 星期二
免費ERP? 免費專案管理?
最近因任務需求,需要一套專案管理系統來協助管理工作
在找了許多系統下,最終就剩下二套在選,一套是odoo (前身是openERP),一套是open project
二套在專案管理上的差異不大,open project 為一套專門的project軟體
支援中文化,個人覺得可以用,其開發語言為Ruby,db是 mysql
至於odoo,他的前身是一套ERP,在進銷存、製造管理上非常強,
我下載最新版的還包括專案管理這個模組。
二套試用之後,最後我選odoo,因為odoo支援了live chat及網頁製作,在專案進行可以從Line上換到這個系統,因為line上的檔案保存期限是有限時的,常常要回頭找時檔案都失效了
加上odoo是使用python所寫, 在日後修改程式碼時我比較熟(我Ruby完全不會)
db的部分是postgre ,這個也是有稍微摸過的東西,不算太生(個人認為postgre很好用...)
所以就選定odoo,希望專案進行順利丫
在找了許多系統下,最終就剩下二套在選,一套是odoo (前身是openERP),一套是open project
二套在專案管理上的差異不大,open project 為一套專門的project軟體
支援中文化,個人覺得可以用,其開發語言為Ruby,db是 mysql
至於odoo,他的前身是一套ERP,在進銷存、製造管理上非常強,
我下載最新版的還包括專案管理這個模組。
二套試用之後,最後我選odoo,因為odoo支援了live chat及網頁製作,在專案進行可以從Line上換到這個系統,因為line上的檔案保存期限是有限時的,常常要回頭找時檔案都失效了
加上odoo是使用python所寫, 在日後修改程式碼時我比較熟(我Ruby完全不會)
db的部分是postgre ,這個也是有稍微摸過的東西,不算太生(個人認為postgre很好用...)
所以就選定odoo,希望專案進行順利丫
2018年10月4日 星期四
勒索病毒 有解密方法?
前些日子公司裡財務部的電腦由於中了wannacry 勒索病毒
身為專業的醫療系統導入工程師兼打雜MIS的我,心裡是幹聲四起
當下第一反應是查明中毒的版本,趕快電腦關掉,因為如果你不關掉,他會拚命的一直加密
花了一天把該救的東西救一救之後 ,整個重灌才算放下心
再來,防火牆該設的也在第一時間補上, 全公司的電腦在微軟的PATCH出來後也全更新到最新,所有人的資料全備份
如此一來才算告一段落,只是這一搞也花了一星期,正務都沒時間做
之後便思考,萬一之後出現變種該如何應對,真的學人乖乖去付比特幣嗎?
又不是傻了,為什麼要去相信一個要害你的人?
但是,勒索病毒這玩意兒真的很厲害,就算你平時用NAS固定在備份,但只要該檔案是有你的完整權限,它依然可以進到NAS把檔案全加密,你的備份一點屁用都沒有,很扯吧。
所以,想到這裡答案就是權限問題, 解決方案也很簡單就是
1.每台電腦設定自動備份到NAS的功能
2.NAS裡每三天會搬一次檔,並把使用者的檔案設成唯讀,因為唯讀連管理員無法直接刪掉
病毒無孔不入,只能預防預防再預防
身為專業的醫療系統導入工程師兼打雜MIS的我,心裡是幹聲四起
當下第一反應是查明中毒的版本,趕快電腦關掉,因為如果你不關掉,他會拚命的一直加密
花了一天把該救的東西救一救之後 ,整個重灌才算放下心
再來,防火牆該設的也在第一時間補上, 全公司的電腦在微軟的PATCH出來後也全更新到最新,所有人的資料全備份
如此一來才算告一段落,只是這一搞也花了一星期,正務都沒時間做
之後便思考,萬一之後出現變種該如何應對,真的學人乖乖去付比特幣嗎?
又不是傻了,為什麼要去相信一個要害你的人?
但是,勒索病毒這玩意兒真的很厲害,就算你平時用NAS固定在備份,但只要該檔案是有你的完整權限,它依然可以進到NAS把檔案全加密,你的備份一點屁用都沒有,很扯吧。
所以,想到這裡答案就是權限問題, 解決方案也很簡單就是
1.每台電腦設定自動備份到NAS的功能
2.NAS裡每三天會搬一次檔,並把使用者的檔案設成唯讀,因為唯讀連管理員無法直接刪掉
病毒無孔不入,只能預防預防再預防
2018年10月3日 星期三
知識管理 Tiddly Wiki
tiddly wiki下載
單一檔案免架站的wiki,平常拿來記一些單字複習和收藏網路文章用的
但公司成員最近增加很多,乾脆拿來做知識管理
一些固定的資訊都可以放上去,分機表、網路ip表等
寫好後直接放上網頁伺服器就變成活生生的網頁了
缺點是wiki的語法有一些奇怪Orz
單一檔案免架站的wiki,平常拿來記一些單字複習和收藏網路文章用的
但公司成員最近增加很多,乾脆拿來做知識管理
一些固定的資訊都可以放上去,分機表、網路ip表等
寫好後直接放上網頁伺服器就變成活生生的網頁了
缺點是wiki的語法有一些奇怪Orz
2018年10月2日 星期二
Router 安全漏洞
近來的漏洞攻擊引起的案子很多
GhostDNS: New DNS Changer Botnet Hijacked Over 100,000 Routers
TP-Link製のWi-Fiネットワーク管理ツールに複数脆弱性
包含前些日子也發現公司內部的一些漏洞,慢慢一個一個找,目前看上去大致上都還可以
除了セキュリティネクスト掲載内容以外、下列的機器清單也要注意
國內常見的牌子,draytek(居易)前陣子也爆出router的dns可由漏洞繞過帳號密碼直接更改
在台灣各論壇上很多人都中獎,太可怕了
GhostDNS: New DNS Changer Botnet Hijacked Over 100,000 Routers
TP-Link製のWi-Fiネットワーク管理ツールに複数脆弱性
包含前些日子也發現公司內部的一些漏洞,慢慢一個一個找,目前看上去大致上都還可以
除了セキュリティネクスト掲載内容以外、下列的機器清單也要注意
國內常見的牌子,draytek(居易)前陣子也爆出router的dns可由漏洞繞過帳號密碼直接更改
在台灣各論壇上很多人都中獎,太可怕了
訂閱:
文章 (Atom)