Read Sean

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

          導航

          公告


          • 關于我
          • 人生是一場對話
          • gaoyuxiang AT gmail DOT com
          • titlelogo.png

          • 我的譯作
          • Scala for the Impatient
          • Open Source SOA
          • Programming in Scala

          • 聲明
          • 所有文章和代碼在這里以"現狀"提供,作者不提供任何形式的擔保,也沒有授予除閱讀和有條件共享之外的任何權利。除非特別說明,所有文章均為本blog作者原創,如需轉載請注明出處和原作者,如用于商業目的,需作者本人書面許可。

          • 推薦文章
          • Pylons起步

          常用鏈接

          留言簿(29)

          隨筆分類(842)

          隨筆檔案(507)

          文章檔案(4)

          Friends' blogs

          搜索

          •  

          積分與排名

          • 積分 - 780803
          • 排名 - 55

          最新評論

          閱讀排行榜

          評論排行榜

          [Pylons] SQLAlchemy起步 - I. Engine API

          Posted on 2009-01-26 20:46 laogao 閱讀(2503) 評論(1)  編輯  收藏 所屬分類: On Python

          ORM是個大話題,大到可能好幾本書都說不完。SQLAlchemy,別看它剛出到0.5.2,已然是Python世界ORM的事實標準,受到眾多開發者和無數框架的青睞。

          如果之前沒有或很少接觸SQLAlchemy,那么學習Pylons可能有相當一部分時間都會花在SQLAlchemy上。通常,人們選擇Pylons或者TurboGears而不是Django,SQLAlchemy在這些決定的背后有著很重的分量。作為Pylons學習筆記的一部分,接下來我將分4篇隨筆介紹SQLAlchemy,分別是Engine API、Schema Management (MetaData/Types)、SQL Expression Language和Object Relational Mapper。此文為第1篇,重點介紹Engine API。

          類似Java的JDBC,Python也有一個類似的數據庫訪問接口規范,那就是DB-API(目前是2.0),不同的常見RDBMS都有符合DB-API標準的Python庫,比如PostgreSQL有psycopg2,Oracle有cx_Oracle等。有了這個基礎,SQLAlchemy也就得以方便的通過DB-API連接不同的數據庫。

          以PostgreSQL為例,通過SQLAlchemy的Engine API訪問數據庫的代碼可以這樣來寫:
          ?1?from?sqlalchemy.engine?import?create_engine
          ?2?
          ?3?engine?=?create_engine('postgres://user:pass@localhost/testdb')
          ?4?connection?=?engine.connect()
          ?5?connection.execute(
          ?6?????"""
          ?7?????CREATE?TABLE?book
          ?8?????(
          ?9?????? id?serial?NOT?NULL,
          10??????title?character?varying(30)?NOT?NULL,
          11??????CONSTRAINT pk_book PRIMARY?KEY?(id)
          12?????);
          13??? """
          14?)
          15?connection.execute(
          16?????"""
          17?????INSERT?INTO?book?(title)?VALUES?(%s);
          18?????""",
          19?????"The?Art?of?UNIX?Programming"
          20?)
          21?rs?=?connection.execute("SELECT title FROM book")
          22?for?row?in?rs:
          23?????print?"Book?Title:?",?row['title']
          24?connection.close()

          基本步驟就是create_engine、connect、execute和close,沒有很特別的地方,不過SQLAlchemy的Engine API,并不是簡單的DBAPI調用,而是包裝了其他內容,如數據庫連接池,我們可以在create_engine的時候指定連接池參數和其他額外配置,類似這樣:
          engine?=?create_engine('postgres://user:pass@localhost/testdb',?pool_size=10, convert_unicode=True)

          類似Spring的JdbcTemplate,更多的時候,統一使用SQLAlchemy的Engine API而不是DB-API能給我們帶來更大的靈活性,通常也更方便、更安全。

          Feedback

          # re: [Pylons] SQLAlchemy起步 - I. Engine API[未登錄]  回復  更多評論   

          2011-02-27 14:26 by 小白
          謝謝了,
          主站蜘蛛池模板: 砀山县| 炉霍县| 焦作市| 昌邑市| 巩义市| 栾城县| 都江堰市| 新丰县| 方正县| 分宜县| 陵水| 和田市| 鹿邑县| 洛扎县| 利津县| 北碚区| 夏河县| 昭苏县| 宣武区| 临猗县| 绍兴市| 苍南县| 舟山市| 连平县| 瑞昌市| 阳信县| 大余县| 承德县| 姚安县| 临安市| 大石桥市| 绥中县| 平利县| 荥经县| 通河县| 岑溪市| 辽宁省| 孟津县| 新津县| 会宁县| 巴彦淖尔市|