python 使用SQLAlchemy 管理mysql數據庫(未完)

 

 

 

  1. 安裝mysql數據庫
  2. 修改mysql,使得可遠程登錄
  3. -- 修改mysql服務器的mysql數據庫的 user 表中的 host字段
    update user set host = '%' where user = 'root';
    FLUSH RIVILEGES
    
    
    
    alter user 'root'@'%' identified with mysql_native_password by '[密碼]';
    flush privileges;

     

  4. 使用ORM (Object Relational Mapping 關係對象映射) 的方式管理數據庫,SQLAlchemy 是ORM的工具
  5. 安裝 SQLAIchemy 
  6. $ sudo apt-get update
    $ sudo pip3 install sqlalchemy

     

  7. 將MySQL默認的編碼改爲utf-8 
  8. $ sudo vim /etc/mysql/my.cnf
    
    
    # 打開文件後添加如下配置
    [client]
    default-character-set = utf8
    
    [mysqld]
    character-set-server = utf8
    
    [mysql]
    default-character-set = utf8
  9.  安裝python與mysql連接的驅動程序 
  10. $ sudo pip3 install pymysql

     

  11.  導入pymysql 並用 pymysql代替 MySQLdb模塊
    import pymysql
    pymysql.install_as_MySQLdb()

     

  12.  初始化數據庫連接,並獲取連接數據庫的連接引擎engine
    engine = create_engine('mysql+mysqldb://root:root@localhost:3306/testdb?charset=utf8',
                           isolation_level='READ UNCOMMITTED', #定義事務約束條件
                           echo=False,  # 不打印SQL語句
                            pool_size = 30, # 定義連接池大小
                            pool_recycle=7200。# 定義連接時長爲2小時
                            ) 

    SQLAlchemy 是通過 Engine 來驅動,Engine 維護了一個連接池(Pool)對象和方言(Dialect),方言簡單而言就是你連的到底是 MySQL 還是 Oracle 或者 PostgreSQL 還是其它數據庫。連接池很重要,因爲每次發送sql查詢的時候都需要先建立連接,如果程序啓動的時候事先就初始化一批連接放在連接池,每次用完後又放回連接池給其它請求使用,就能大大提高查詢的效率

    通過函數 create_engine 就可以創建連接引擎engine
    構建好 Engine 對象的同時,連接池和Dialect也創建好了,但是這時候並不會立馬與數據庫建立真正的連接,只有你調用 Engine.connect() 或者 Engine.execute(sql) 執行SQL請求的時候,纔會建立真正的連接。因此 Engine 和 Pool 的行爲稱之爲延遲初始化。
    echo :爲 True 時候會把sql語句打印出來
    pool_size: 是連接池的大小,默認爲5個,0表示連接數無限制
    pool_recycle: MySQL 默認情況下如果一個連接8小時內容沒有任何動作(查詢請求)就會自動斷開鏈接,出現 MySQL has gone away的錯誤。設置了 pool_recycle 後 SQLAlchemy 就會在指定時間內回收連接。如果設置爲3600 就表示 1小時後該連接會被自動回收。
    pool_pre_ping : 這是1.2新增的參數,如果值爲True,那麼每次從連接池中拿連接的時候,都會向數據庫發送一個類似 select 1 的測試查詢語句來判斷服務器是否正常運行。當該連接出現 disconnect 的情況時,該連接連同pool中的其它連接都會被回收。

  13. 創建對象基類
    Base = declarative_base()
     
  14.  定義與數據庫中表相對應的類
    class Test(Base):
        """ 描述信息
        """
        
        __tablename__ = 'test_table'
        
        nameId = Column(String(30), primary_key=True)
        name = Column(String(30),unique=True)
        # ...

     

  15. 實施建表操作,完成類與表的映射
    Base.metadata.create_all(engine)

     

  16. 創建會話類
    Session = sessionmaker(bind=engine)
     
  17.  創建會話類對象
    session = Session()

     

  18.  業務邏輯操作,執行SQL語句



     
  19. 執行提交操作,將操作保持到數據庫
    session.commit()
      
  20. 關閉會話對象
    session.close()

     

  21.  

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章