python量化開發(fā)2|python與各數(shù)據(jù)庫的接口調(diào)通

今天是2017.1.9r新症。

看到了之前已經(jīng)開發(fā)的一些API,但是由于之前沒有系統(tǒng)的學(xué)習(xí)python中類的編寫虐块,所以看起來還是有一些吃力的赋除,甚至有一點(diǎn)點(diǎn)泄氣。不過不知道從什么時(shí)候開始非凌,自己每次遇到困難時(shí)總會在內(nèi)心告訴自己举农,因?yàn)楝F(xiàn)在是在走上坡路才會感到吃力,說明你正在往上走敞嗡,在進(jìn)步颁糟。

這里會記錄一些在看相關(guān)API中遇到的一些不懂的python中相應(yīng)庫和語法。


一喉悴、關(guān)于使用pip命令安裝庫

之前在terminal中用pip install時(shí)一直報(bào)錯(cuò)找不到相應(yīng)版本的庫棱貌。
所以只好下載對應(yīng)庫的.whl文件,然后再用pip install 命令安裝這個(gè).whl文件箕肃。
(這里是自己找到的一個(gè)包括所有第三方庫whl文件的下載地址:http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql

二婚脱、python和各個(gè)數(shù)據(jù)庫之間的接口調(diào)通

做這一類的開發(fā)必然會用到數(shù)據(jù)庫中的數(shù)據(jù),這就需要用python連接各類數(shù)據(jù)庫勺像,包括SQL Sever障贸、Mysql、Oracle吟宦、MongoDB等篮洁。在python中使用sqlalchemy 庫中的create_engine來建立連接。

from sqlalchemy import create_engine
from pymongo import MongoClient
db_engine=dict()        #---用db_engine這個(gè)空字典來存儲所有的連接
db_engine['MongoDB']=MongoClient('192.168.169.39', 40000)

db_engine['Tinysoft']=create_engine('mssql+pymssql://fes:fes@10.132.120.141:1433/TsFund', echo=False)

db_engine['PPW']=create_engine('mysql+pymysql://data_user_hr:0!sH,nSDC#m4oTha@211.154.153.26:3306/rz_hfdb_core?charset=utf8mb4',  echo=False)

db_engine['TOS_RES']=create_engine('oracle://res:1@10.53.54.12:1521/orcl', echo=False)

三殃姓、sqlalchemy庫 的使用

下面再說一些使用sqlalchemy庫對數(shù)據(jù)庫進(jìn)行操作的例子袁波。

from sqlalchemy import * # Column, String, create_engine,func, or_, not_
from sqlalchemy.orm import * # sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.types import CHAR, Integer
from odo import odo

(1)瓦阐、底層處理
使用 Engine/ConnectionPooling/Dialect 進(jìn)行數(shù)據(jù)庫操作,Engine使用ConnectionPooling連接數(shù)據(jù)庫篷牌,然后再通過Dialect執(zhí)行SQL語句睡蟋。

#創(chuàng)建引擎
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

DB_CONNECT_STRING = 'mysql+mysqldb://root:123@localhost/ooxx?charset=utf8'
engine = create_engine(DB_CONNECT_STRING, echo=True)
DB_Session = sessionmaker(bind=engine)
session = DB_Session()

這里的 DB_CONNECT_STRING 就是連接數(shù)據(jù)庫的路徑〖霞眨“mysql+mysqldb”指定了使用 MySQL-Python 來連接戳杀,“root”和“123”分別是用戶名和密碼,“l(fā)ocalhost”是數(shù)據(jù)庫的域名偷卧,“ooxx”是使用的數(shù)據(jù)庫名(可省略),“charset”指定了連接時(shí)使用的字符集(可省略)吆倦。
create_engine() 會返回一個(gè)數(shù)據(jù)庫引擎听诸,echo 參數(shù)為 True 時(shí),會顯示每條執(zhí)行的 SQL 語句蚕泽,生產(chǎn)環(huán)境下可關(guān)閉晌梨。
sessionmaker() 會生成一個(gè)數(shù)據(jù)庫會話類。
拿到 session 后须妻,就可以執(zhí)行 SQL 了:
session.execute('create database abc')

(2)仔蝌、ORM功能使用
使用 ORM/Schema Type/SQL Expression Language/Engine/ConnectionPooling/Dialect 所有組件對數(shù)據(jù)進(jìn)行操作。根據(jù)類創(chuàng)建對象荒吏,對象轉(zhuǎn)換成SQL敛惊,執(zhí)行SQL。

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy import create_engine

engine = create_engine("mysql+pymysql://fuzj:123123@127.0.0.1:3306/123", max_overflow=5)

Base = declarative_base()         ---------------------------- declarative_base()用來表示 

class Favor(Base):
__tablename__ = 'favor'
nid = Column(Integer, primary_key=True)
caption = Column(String(50), default='red', unique=True)

class Person(Base):
__tablename__ = 'person'
nid = Column(Integer, primary_key=True)
name = Column(String(32), index=True, nullable=True)
favor_id = Column(Integer, ForeignKey("favor.nid"))

Base.metadata.create_all(engine)  #創(chuàng)建表    
# Base.metadata.drop_all(engine)   #刪除表

declarative_base() 創(chuàng)建了一個(gè) BaseModel 類绰更,這個(gè)類的子類可以自動與一個(gè)表關(guān)聯(lián)瞧挤。
以 User 類為例,它的 tablename 屬性就是數(shù)據(jù)庫中該表的名稱儡湾,它有 id 和 name 這兩個(gè)字段特恬,分別為整型和 30 個(gè)定長字符。Column 還有一些其他的參數(shù)徐钠,我就不解釋了癌刽。
最后,BaseModel.metadata.create_all(engine) 會找到 BaseModel 的所有子類尝丐,并在數(shù)據(jù)庫中建立這些表显拜;drop_all() 則是刪除這些表。

(3)爹袁、Odo:實(shí)現(xiàn)不同格式數(shù)據(jù)的轉(zhuǎn)換
Odo 庫是Blaze的一個(gè)衍生項(xiàng)目. 用于數(shù)據(jù)交換讼油,保證了各種不同格式數(shù)據(jù)間的移植 (CSV, JSON, HDFS, and more) 并且跨越不同的數(shù)據(jù)庫 (SQL 數(shù)據(jù)庫, MongoDB, 等等) ,用法簡單呢簸,Odo(source, target)

odo需要傳遞兩個(gè)參數(shù)矮台,第一個(gè)參數(shù)是數(shù)據(jù)來源乏屯,第二個(gè)參數(shù)是目標(biāo)數(shù)據(jù)格式。
>>> from odo import odo
>>> odo((1, 2, 3), list)
[1, 2, 3]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瘦赫,一起剝皮案震驚了整個(gè)濱河市辰晕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌确虱,老刑警劉巖含友,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異校辩,居然都是意外死亡窘问,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門宜咒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惠赫,“玉大人,你說我怎么就攤上這事故黑《郏” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵场晶,是天一觀的道長混埠。 經(jīng)常有香客問我,道長诗轻,這世上最難降的妖魔是什么钳宪? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮扳炬,結(jié)果婚禮上使套,老公的妹妹穿的比我還像新娘。我一直安慰自己鞠柄,他們只是感情好侦高,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著厌杜,像睡著了一般奉呛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上夯尽,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天瞧壮,我揣著相機(jī)與錄音,去河邊找鬼匙握。 笑死咆槽,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的圈纺。 我是一名探鬼主播秦忿,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼麦射,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了灯谣?” 一聲冷哼從身側(cè)響起潜秋,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎胎许,沒想到半個(gè)月后峻呛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡辜窑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年钩述,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片穆碎。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡牙勘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出惨远,到底是詐尸還是另有隱情谜悟,我是刑警寧澤话肖,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布北秽,位于F島的核電站,受9級特大地震影響最筒,放射性物質(zhì)發(fā)生泄漏贺氓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一床蜘、第九天 我趴在偏房一處隱蔽的房頂上張望辙培。 院中可真熱鬧,春花似錦邢锯、人聲如沸扬蕊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尾抑。三九已至,卻和暖如春蒂培,著一層夾襖步出監(jiān)牢的瞬間再愈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工护戳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留翎冲,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓媳荒,卻偏偏與公主長得像抗悍,于是被迫代替她去往敵國和親驹饺。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容