一,SQLAlchemy的安装 使用 $ easy_install sqlalchemy或 $ pip install sqlalchemy 如果出现什么错,就进去root用户下进行安装试试,或者网上查查 import sqlalchemy 这样说明成功了,切记是小写哦 二,使用 理论我也不懂,自己查查资料,现在用一个小的案
一,SQLAlchemy的安装
使用
$easy_install sqlalchemy
或
$pip install sqlalchemy
如果出现什么错,就进去root用户下进行安装试试,或者网上查查
>>>import sqlalchemy
>>>
这样说明成功了,切记是小写哦
二,使用
理论我也不懂,自己查查资料,现在用一个小的案例说一下使用步骤
1,在进行数据操作之前要先连上数据库。
>>>from sqlalchemy import create_engine
>>>from sqlalchemy.orm import sessionmaker
>>>DB_CONNECT = 'mysql+mysqldb://root:102@localhost/mydb'
>>>engine = create_engine(DB_CONNECT, echo=True)
>>>DB_Session = sessionmaker(bind=engine)
>>>session = DB_Session()
from 是从sqlalchemy中插入必须的模板,DB_CONNECT 是构造数据库的路径 ,mysql+mysqldb是说明使用MySQL-Python 来连接,root是数据库用户名,102是密码,localhost表示是数据库在本机上,mydb是要连接的数据库名字,设置字符集的charset可以省了
create_engine() 会返回一个数据库引擎,echo 参数为 True 时,会显示每条执行的 SQL 语句,生产环境下可关闭。
sessionmaker(bind=engine)会生成一个数据库会话类。这个类的实例可以当成一个数据库连接,它同时还记录了一些查询的数据,并决定什么时候执行 SQL 语句。由于 SQLAlchemy 自己维护了一个数据库连接池(默认 5 个连接),也可以自己设置。
得到session 后,就可以执行 SQL 了:
2,在进行操作前先把表给建立了,由于SQLAlchemy 可以和变进行建立连接并且可以通过语言进行见表
mysql> show tables;
Empty set (0.00 sec)
mysql>
此时是没有表的,现在我们建立一个学生便stu,一个课程表cla和一个成绩表grade
>>> from sqlalchemy import Column
>>> from sqlalchemy.types import CHAR, Integer, String
>>> from sqlalchemy.ext.declarative import declarative_base
>>> from random import randint
>>> from sqlalchemy import ForeignKey
>>> BaseModel = declarative_base()
>>> def init_db():
... BaseModel.metadata.create_all(engine)
...
>>> def drop_db():
... BaseModel.metadata.drop_all()
...
>>> class Stu(BaseModel):
... __tablename__='stu'
... id = Column(Integer,primary_key = True)
... name = Column(CHAR(30))
...
>>> class Cla(BaseModel):
... __tablename__='cla'
... id = Column(Integer,primary_key = True)设置主键
... cname = Column(CHAR(30))
...
>>> class Grade(BaseModel):
... __tablename__ = 'grade'
... uid = Column(Integer,ForeignKey('stu.id'))设置外键
... cid = Column(Integer,ForeignKey('cla.id'))
... id = Column(Integer,primary_key=True)
... gre=Column(Integer)
...
declarative_base() 创建了一个 BaseModel 类,这个类的子类可以自动与一个表关联。以 Stu 类为例,它的 tablename 属性就是数据库中该表的名称,它有 id 和 name 这两个字段,分别为整型和 30 个定长字符。Column 还有一些其他的参数,我就不解释了。
最后,BaseModel.metadata.create_all(engine) 会找到 BaseModel 的所有子类,并在数据库中建立这些表;drop_all() 则是删除这些表。
现在执行init_db()进行建立表,对应语句如下
>>> init_db()
CREATE TABLE stu (
id INTEGER NOT NULL AUTO_INCREMENT,
name CHAR(30),
PRIMARY KEY (id)
)
CREATE TABLE cla (
id INTEGER NOT NULL AUTO_INCREMENT,
cname CHAR(30),
PRIMARY KEY (id)
)
CREATE TABLE grade (
id INTEGER NOT NULL AUTO_INCREMENT,
uid INTEGER,
cid INTEGER,
gre INTEGER,
PRIMARY KEY (id),
FOREIGN KEY(uid) REFERENCES stu (id),
FOREIGN KEY(cid) REFERENCES cla (id)
)
COMMIT
>>>
以上就是执行时对应的建表语句,现在去数据库看看表是否存在,并查看一个表结构
mysql> show tables;
+----------------+
| Tables_in_mydb |
+----------------+
| cla |