使用sqlalchemy處理已有的數(shù)據(jù)庫(kù)

使用django搭建的網(wǎng)站幻馁,已經(jīng)在django的models中創(chuàng)建了模型庇配,并且已經(jīng)有數(shù)據(jù)。
這里需要在后臺(tái)寫server處理后臺(tái)采集的數(shù)據(jù)尊残。

使用automap_base獲取數(shù)據(jù)庫(kù)中已有的表

from sqlalchemy import create_engine
from sqlalchemy.ext.automap import automap_base


def get_database(host, db_name, user, password):
    """
    create existed postgre database engine and get its table with sqlalchemy

    :param host:host name, eg:'192.168.8.8'
    :param db_name: postgre database's name,eg:'mydatabase'
    :param user: postgre database user's name, eg: 'myname'
    :param password: postgre databse user's password
    :return: db_engine, database engine,can used by sqlalchemy or pandas
             tables, database's tables
    """
    db_type = "postgres"  # postgresql+psycopg2
    string = "%s://%s:%s@%s/%s" % (db_type, user, password, host, db_name)
    db_engine = create_engine(string, echo=False, client_encoding='utf8')
    # get sqlalchemy tables from database
    Base = automap_base()
    Base.prepare(db_engine, reflect=True)
    tables = Base.classes
    return db_engine, tables
  
db_engine, db_table = get_database(host, data_db, user)

db_table的類型為<class 'sqlalchemy.util._collections.Properties'>
炒瘸,可以通過(guò)tables.數(shù)據(jù)庫(kù)表名來(lái)訪問數(shù)據(jù)庫(kù)表淤堵,比如該數(shù)據(jù)庫(kù)中有一個(gè)名為device的數(shù)據(jù)庫(kù)表,則訪問該表的方法為:tab_device = db_table.device或者tab_device = db_table['device']什燕。

數(shù)據(jù)庫(kù)表數(shù)據(jù)操作

上面得到的數(shù)據(jù)庫(kù)表類實(shí)例可用于sqlalchemy的sql查詢和orm操作粘勒。

sql查詢

from sqlalchemy.sql import select
import pandas as pd

selector_device = select([tab_device]).where(tab_device.type_id == device_type)
df_device = pd.read_sql(selector_device, con=engine)

這里的selector_device的類型為:<class 'sqlalchemy.sql.selectable.Select'>
,該類型的查詢語(yǔ)句可供pandas的read_sql函數(shù)直接使用屎即,將查詢結(jié)果轉(zhuǎn)換為pd.DataFrame格式庙睡。

orm查詢

from sqlalchemy.orm import sessionmaker


session = sessionmaker(bind=db_engine)()

query_device = session.query(tab_device).filter(tab_device.type_id == device_type)

這里的query_device的類型為<class 'sqlalchemy.orm.query.Query'>
,該類型的查詢語(yǔ)句無(wú)法供pandas的read_sql使用技俐,原因在于pandas read_sql的sql輸入類型為 : string SQL query or SQLAlchemy Selectable (select or text object)to be executed, or database table name.

sql刪除

sqlalchemy sql expression官方教程得到的刪除方法應(yīng)該是這樣的:
tab_device.delete().where(...)
但是會(huì)報(bào)以下錯(cuò)誤:
AttributeError: type object 'device' has no attribute 'delete'
sql還有與select相似的delete函數(shù)乘陪,可以這樣引入:
from sqlalchemy.sql import delete
但是沒從官方教程看到相關(guān)文檔,源碼封裝的比較好雕擂,也沒找到啡邑,時(shí)間有限,先放棄井赌。

orm刪除

orm刪除可以這樣實(shí)現(xiàn):

(Pdb) test = session.query(db_table.kindergarten_deviceinfo).filter(db_table.kindergarten_deviceinfo.type_id==100)
(Pdb) test.delete()

然后用session.commit()提交就可以了谤逼。
本來(lái)想只用sqlalchemy的sql或者orm,但是現(xiàn)在還不能完全實(shí)現(xiàn)功能仇穗,等有時(shí)間了流部,研究一下能否實(shí)現(xiàn)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末纹坐,一起剝皮案震驚了整個(gè)濱河市枝冀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌耘子,老刑警劉巖果漾,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異谷誓,居然都是意外死亡绒障,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門捍歪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)户辱,“玉大人,你說(shuō)我怎么就攤上這事费封。” “怎么了蒋伦?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵弓摘,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我痕届,道長(zhǎng)韧献,這世上最難降的妖魔是什么末患? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮锤窑,結(jié)果婚禮上璧针,老公的妹妹穿的比我還像新娘。我一直安慰自己渊啰,他們只是感情好探橱,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著绘证,像睡著了一般隧膏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嚷那,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天胞枕,我揣著相機(jī)與錄音,去河邊找鬼魏宽。 笑死腐泻,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的队询。 我是一名探鬼主播派桩,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼娘摔!你這毒婦竟也來(lái)了窄坦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤凳寺,失蹤者是張志新(化名)和其女友劉穎鸭津,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肠缨,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡逆趋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了晒奕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片闻书。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖脑慧,靈堂內(nèi)的尸體忽然破棺而出魄眉,到底是詐尸還是另有隱情,我是刑警寧澤闷袒,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布坑律,位于F島的核電站,受9級(jí)特大地震影響囊骤,放射性物質(zhì)發(fā)生泄漏晃择。R本人自食惡果不足惜冀值,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宫屠。 院中可真熱鬧列疗,春花似錦、人聲如沸浪蹂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)乌逐。三九已至竭讳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間浙踢,已是汗流浹背绢慢。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留洛波,地道東北人胰舆。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蹬挤,于是被迫代替她去往敵國(guó)和親缚窿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

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