sqlalchemy mysql创建表_Python中使用SQLAlchemy连接Mysql数据库(单表操作)

一,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 |

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值