创建表
创建数据表依赖的是 ssqlalchemy.ext.declarative 下面的 declarative_base 方法。所以需要先行引入
from sqlalchemy.ext.declarative import declarative_base
表类型这块可以看一下官方文档的介绍,基本能用到的都全部由官方抽象。 http://docs.sqlalchemy.org/en/latest/core/type_basics.html#generic-types
例如常见的 Integer、String、Date、DateTime、BigInteger、Boolean 可以直接从sqlalchemy模块中引用
from sqlalchemyimport Column,Integer, String, DateTime, Boolean
我们可以先创建一个信息表,这个表结构大概样例如下
我们可以先创建一个类 ,同时需要在里面指定数据表名称,但是在这之前,我们自己创建类需要继承sqlalchemy的declarative_base方法
from sqlalchemy.ext.declarativeimport declarative_base
from sqlalchemy.orm import sessionmaker
from sqlalchemyimport Column,Integer, String, DateTime, Boolean
from sqlalchemyimport create_engine
engine = create_engine("mysql+pymysql://root:@127.0.0.1/table?charset=utf8")
Base = declarative_base()
class My_Table(Base):
tablename__ ='test_table'
id = Column(Integer,primary_key =True)
title = Column(String(200),nullable =False)
content = Column(String(2000),nullable =False)
types = Column(String(10),nullable =False)
image = Column(String(300),)
author = Column(String(20),)
view_count = Column(Integer)
created_at = Column(DateTime)
is_valid = Column(Boolean)
My_Table.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
以上代码执行后,就会创建数据表,接下来,我在逐行讲解一下具体的内容分别是什么,首先是引入了sessionmaker,Session的主要目的是建立与数据库的会话,它维护你加载和关联的所有数据库对象。它是数据库查询(Query)的一个入口。
在Sqlalchemy中,数据库的查询操作是通过Query对象来实现的。而Session提供了创建Query对象的接口
在我们创建了My_Table这个类以后,我们使用了 .metadata.create_all()这个方法,并将engine作为参数传入(engine是连接数据库的方法),你也可以直接使用父类Base的方式将多个表同时创建,例如Base.metadata.create_all(engine) 。
接下来在来说My_Table 里面的内容,自己创建类继承自declarative_base()。在创建的时候,我们会默认给类加一个表名。(__tablename__)
然后就是表中的各个对象的创建
增、删、改、查
在数据库表创建好以后,我们可以创建一个自己的类,用来写自己的一些功能,我们先写Orm_Test这个类。
class OrmTest(object):
def __init__(self):
self.session = Session()
def add_one(self):
#'新增一条记录'
new_obj = My_Table(title ='标题',content ='内容',types ='0',)
self.session.add(new_obj)
self.session.commit()
return new_obj
def get_one(self):
#查询一条数据
return self.session.query(My_Table).get(3)
def get_all(self):
#查询多条数据
return self.session.query(My_Table).filter_by(is_valid=True)
def update(self,pk):
#修改数据
new_obj =self.session.query(My_Table).get(pk)
if new_obj:
new_obj.is_valid =0
self.session.add(new_obj)
self.session.commit()
return True
return False
def delete(self,pk):
#删除数据
new_obj =self.session.query(My_Table).get(pk)
self.session.delete(new_obj)
self.session.commit()
网友评论