<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Read Sean

    Read me, read Sean.
    posts - 508, comments - 655, trackbacks - 9, articles - 4

    [Pylons] SQLAlchemy起步 - II. MetaData和Types

    Posted on 2009-01-26 22:14 laogao 閱讀(2470) 評論(0)  編輯  收藏 所屬分類: On Python

    在sqlalchemy.schema和sqlalchemy.types這兩個module中,包含了定義數據庫schema所需要的所有類,如Table、Column、String、Text、Date、Time、Boolean等。還是來看一個例子:

    ?1?from?sqlalchemy.engine?import?create_engine
    ?2?from?sqlalchemy.schema?import?MetaData,?Table,?Column,?ForeignKey,?Sequence
    ?3?from?sqlalchemy.types?import?*
    ?4?
    ?5?engine?=?create_engine('postgres://test:test@localhost/test',?echo=True)
    ?6?
    ?7?metadata?=?MetaData()
    ?8?metadata.bind?=?engine
    ?9?
    10?book_table?=?Table('book',?metadata,
    11?????Column('id',?Integer,?Sequence('seq_pk'),?primary_key=True),
    12?????Column('title',?Unicode(255),?nullable=False),
    13?)
    14?
    15?author_table?=?Table('author',?metadata,
    16?????Column('id',?Integer,?Sequence('seq_pk'),?primary_key=True),
    17?????Column('name',?Unicode(255),?nullable=False),
    18?)
    19?
    20?bookauthor_table?=?Table('bookauthor',?metadata,
    21??? Column('book_id',?Integer,?ForeignKey('book.id'),?nullable=False),
    22??? Column('author_id',?Integer,?ForeignKey('author.id'),?nullable=False),
    23)
    24
    25metadata.create_all(checkfirst=True)

    首先我們還是create_engine,然后新建一個MetaData對象,把engine綁上去,接下來,開始在metadata中定義表結構(metadata由Table構造函數傳入),我們這里定義了3張表,分別是book、author和bookauthor關系表(“多對多”),其中新建一個Sequence對象,專門處理主鍵生成。最后我們通過執行metadata.create_all()創建數據庫表,參數checkfirst=True表示如果數據庫相關對象已經存在,則不重復執行創建。

    對于已經存在于數據庫中的表,我們可以通過傳入autoload=True參數到Table構造函數的方式來加載現有的表結構到metadata中,而不必挨個兒再寫一遍Column清單。

    看到這兒,你也許覺得挺麻煩,不是么?Django和RoR都是可以直接定義數據model類,順帶就把schema也定義了,而不是像這樣單獨去寫表結構的schema,顯得很"底層"。確實,這樣用SQLAlchemy并不是最優化的,SQLAlchemy本身并不會自動的幫你做很多事,但它基礎打得很牢。如果你感興趣,也可以先去看一下SQLAlchemy的擴展模塊Elixir,通過Elixir,你可以像Ruby on Rails那樣定義出實體和關系("Active Record")。

    在稍后的第4部分中,我們會去了解如何以聲明方式來更緊湊的定義我們的model/schema(0.5新特性)。鑒于筆者傾向于更強的控制力,所以在這個系列中就不去介紹SQLAlchemy的其他擴展模塊了,如Elixir、SQLSoup等,大家可以根據需要去找下官方文檔。

    主站蜘蛛池模板: 亚洲中文字幕在线第六区| 亚洲av无码久久忘忧草| 亚洲av之男人的天堂网站| 亚洲日韩乱码中文无码蜜桃臀| 亚洲伊人久久大香线蕉AV| 特级毛片在线大全免费播放| 四虎成人精品永久免费AV| 日本视频免费在线| 国产亚洲3p无码一区二区| 亚洲欧美成人一区二区三区| 成人精品一区二区三区不卡免费看| 日本特黄特黄刺激大片免费| 久久亚洲成a人片| 一个人看的www在线免费视频| AV大片在线无码永久免费| 亚洲精品国产精品乱码视色| 色综合久久精品亚洲国产| 五月亭亭免费高清在线| 亚洲AV无码国产精品色午友在线| 免费高清A级毛片在线播放| 中国国语毛片免费观看视频| 一二三四免费观看在线电影| 最新亚洲人成无码网www电影| 国产不卡免费视频| 美女被羞羞网站免费下载| 国产成人免费手机在线观看视频| 国产亚洲中文日本不卡二区| 毛片A级毛片免费播放| 亚洲日本成本人观看| 国产公开免费人成视频| h视频免费高清在线观看| 亚洲视频一区二区| 久久久久高潮毛片免费全部播放 | 最近中文字幕无吗免费高清| 久久久久久亚洲精品无码| 亚洲人成无码www久久久| 亚在线观看免费视频入口| 中国亚洲呦女专区| 亚洲色爱图小说专区| 午夜视频在线观看免费完整版| 国产一级a毛一级a看免费人娇|