sqlalchemy基本使用,sqlalchemy使用
一、ORM介紹
orm英文全稱object relational mapping,就是對象映射關係程式,簡單來說我們類似python這種物件導向的程式來說一切皆對象,但是我們使用的資料庫卻都是關係型的,為了保證一致的使用習慣,通過orm將程式設計語言的物件模型和資料庫的關聯式模式建立映射關係,這樣我們在使用程式設計語言對資料庫進行操作的時候可以直接使用程式設計語言的物件模型進行操作就可以了,而不用直接使用sql語言。
orm的優點:
缺點:
二、sqlalchemy
在Python中,最有名的ORM架構是SQLAlchemy。
Dialect用於和資料API進行交流,根據設定檔的不同調用不同的資料庫API,從而實現對資料庫的操作,如:
MySQL-Python mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname> pymysql mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>] MySQL-Connector mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname> cx_Oracle oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...] # 更多詳見:http://docs.sqlalchemy.org/en/latest/dialects/index.html
安裝sqlalchemy
pip3 install sqlalchemy
三、sqlalchemy基本使用
3.1 建立表
sql語句建立表:
CREATE TABLE user ( id INTEGER NOT NULL AUTO_INCREMENT, name VARCHAR(32), password VARCHAR(64), PRIMARY KEY (id))
使用sqlalchemy建立
# -*- coding: UTF-8 -*-from sqlalchemy import create_enginefrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import Column, Integer, Stringfrom sqlalchemy.orm import sessionmakerengine = create_engine("mysql+pymysql://bigberg:111111@172.16.200.49:3306/study", encoding="utf-8", echo=True) # 串連資料庫,echo=True =>把所有的資訊都列印出來Base = declarative_base() # 產生orm基類class User(Base): __tablename__ = "user" # 表名 id = Column(Integer, primary_key=True) name = Column(String(32)) passwd = Column(String(64))Base.metadata.create_all(engine) # 這邊的意思是建立定義所有的表
查看建立的表:
mysql> desc user;+--------+-------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+--------+-------------+------+-----+---------+----------------+| id | int(11) | NO | PRI | NULL | auto_increment || name | varchar(32) | YES | | NULL | || passwd | varchar(64) | YES | | NULL | |+--------+-------------+------+-----+---------+----------------+3 rows in set (0.02 sec)
3.2 插入資料
使用sqlalchemy插入資料
# 建立與資料庫的會話session class ,注意,這裡返回給session的是個class,不是執行個體Session_class = sessionmaker(bind=engine)# 產生session執行個體Session = Session_class()# 產生你要建立的資料對象user_obj = User(name="bigberg", passwd="twgdh123")# 此時還沒建立對象呢,不信你列印一下id發現還是Noneprint(user_obj.name, user_obj.id)# 把要建立的資料對象添加到這個session裡, 一會統一建立Session.add(user_obj)# 此時也依然還沒建立print(user_obj.name, user_obj.id)# 現此才統一提交,建立資料Session.commit()
mysql> select * from user;+----+---------+----------+| id | name | passwd |+----+---------+----------+| 1 | bigberg | twgdh123 |+----+---------+----------+1 row in set (0.00 sec)