1.創(chuàng)建數(shù)據(jù)庫和表
例子1:
from sqlalchemy import create_engine
from sqlalchemy import Column, Date, Integer, String, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
# 連接數(shù)據(jù)庫
engine = create_engine('sqlite:///memory.db', echo=True)
# 基本類
Base = declarative_base()
# 表要繼承基本類
class User(Base):
__tablename__ = 'users' # 表的名字
# 定義各字段
id = Column(Integer, primary_key=True)
name = Column(String)
fullname = Column(String)
password = Column(String)
def __str__(self):
return self.id
# 創(chuàng)建表
Base.metadata.create_all(engine)
以上代碼會在當(dāng)前目錄創(chuàng)建名為 memory.db
的數(shù)據(jù)庫你踩,并創(chuàng)建一張名為 users
的表诅岩,表內(nèi)有 id
、 name
带膜、fullname
和 password
四個字段吩谦。
在這里我們沒有設(shè)置字段最大長度,對 SQLite 和 PostgreSQL膝藕,這是一個有效的數(shù)據(jù)類型式廷,如果需要,可以這樣設(shè)置:
Column(String(50))
例子2:
from sqlalchemy import create_engine, MetaData
from sqlalchemy import Table, Column, Date, Integer, String, ForeignKey
# 連接數(shù)據(jù)庫
engine = create_engine('sqlite:///test.db', echo=True)
# 綁定引擎
metadata = MetaData(engine)
# 定義表格
user_table = Table('user', metadata,
Column('id', Integer, primary_key=True),
Column('name', String(50)),
Column('fullname', String(100))
)
address_table = Table('address', metadata,
Column('id', Integer, primary_key=True),
Column('user_id', None, ForeignKey('user.id')),
Column('email', String(128), nullable=False)
)
metadata.create_all()
以上代碼會在當(dāng)前目錄創(chuàng)建名為 test.db
的數(shù)據(jù)庫芭挽,并創(chuàng)建兩張表滑废,分別為: user
和 address
。
創(chuàng)建引擎時袜爪,echo
參數(shù)為 True
蠕趁,程序運行時調(diào)試信息會打印出來。
2.連接數(shù)據(jù)表
實際應(yīng)用時辛馆,往往表都已經(jīng)存在俺陋,并不需要創(chuàng)建,只需把它們”導(dǎo)入”進(jìn)來即可昙篙,這時就得使用 autoload
參數(shù)腊状。
from sqlalchemy import create_engine, MetaData
from sqlalchemy import Table, Column, Date, Integer, String, ForeignKey
# 連接數(shù)據(jù)庫
engine = create_engine('sqlite:///school.db', echo=False)
# 綁定引擎
metadata = MetaData(engine)
# 連接數(shù)據(jù)表
user_table = Table('user', metadata, autoload=True)
address_table = Table('address', metadata, autoload=True)
如果 MetaData 沒有綁定引擎,則另需指定 autoload_with
參數(shù):
user_table = Table('user', metadata, autoload=True, autoload_with=engine)