tornado框架SQLAlchemy的操作

来源:互联网 发布:宁波傲强自动编程软件 编辑:程序博客网 时间:2024/06/12 07:28

SQLAlchemy连接数据库

在用到python的一些框架里,需要进行前后端数据交互,其中数据库的连接是必不可少的,之前自己使用SQLAlchemy在进行数据库连接时遇到了很多问题,以及一些流程不是很清楚。所以花了点时间进行了一下流程梳理。

1.首先建立一个空py文件(这里命名为connect.py),导入包:

from sqlalchemy import create_engine

接下来设定连接数据库(以MySQL为例)所需要的信息,包括用户名、密码、端口号、IP以及要使用的数据库名字等信息,例如:

HOSTNAME = '127.0.0.1'PORT = '3306'DATABASE = 'mydb'USERNAME = 'root'PASSWORD = '123456'

然后设置一个字符串的格式:

db_url='mysql+pymysql://{}:{}@{}/{}?charset=utf8'.format(    USERNAME,    PASSWORD,    HOSTNAME,    DATABASE)

创建一个引擎:

engine = create_engine(db_url)

将引擎作为参数导入declarative_base()方法,返回一个类:

from sqlalchemy.ext.declarative import declarative_baseBase = declarative_base(engine)

同时需要创建一个会话窗,即映射:

from sqlalchemy.orm import sessionmakerSession = sessionmaker(engine)session = Session()

验证是否成功可以在尾端进行如下操作:

if __name__=='__main__':    print(dir(Base))    print(dir(session))

2.新建一个py文件(这里命名为user_modules.py),用来创建一个user表单。
首先从SQLAlchemy导入创建数据库记录的格式,同时将上个connect.py文件里创建的Basesession导入进来,下面也需要用到datetime的模块,将其也导入进来:

from datetime import datetimefrom connect import Base,sessionfrom sqlalchemy import Column,Integer,String,DateTime,Boolean

然后定义一个User类,继承Base

class User(Base):    __tablename__ = 'user'  #表格名字    id = Column(Integer,primary_key=True,autoincrement=True)    username = Column(String(20),nullable=False)    password = Column(String(50))    creatime = Column(DateTime,default=datetime.now)    _locked = Column(Boolean,default=False,nullable=False)    # 自己封装查询方法    @classmethod    def get_all(cls):        return session.query(cls).all()    @classmethod    def get_id(cls,id):        return session.query(cls).filter_by(id=id).all()    @classmethod    def get_username(cls,username):        return session.query(cls).filter_by(username=username).all()    @property    def locked(self):        return self._locked    def __repr__(self):        return "<User(id='%s',username='%s',password='%s',creatime='%s',_locked='%s')>"%(            self.id,            self.username,            self.password,            self.creatime,            self._locked        )

最后再执行创建:

if __name__=='__main__':    Base.metadata.create_all()

可以登录数据库查看一下user表是否被创建出来。

3.最后再创建一个py文件(这里命名为test_user.py),用来测试对user表的“增删改查”:

from user_modules import Userfrom connect import session#增def add_user():    # person = User(username='suyn',password='123456')    # session.add(person)    session.add_all([User(username='der',password='asdfas'),User(username='sa',password='mima99')])    session.commit()#删def delete_user():    row = session.query(User).filter_by(username='der')[0]    print(row)    session.delete(row)    session.commit()#改def update_user():    session.query(User).filter_by(id=3).update({User.password:'abcdefg'})    session.commit()#查def query_user():    row = session.query(User).filter_by(username='suyn').all()    row = session.query(User).filter(User.username=='suyn').all()    print(row[0]._locked)    session.commit()

最后可以进行验证:

if __name__=='__main__':    # 验证    # add_user()    # delete_user()    # update_user()    # query_user()    print(User.get_id(1)) # 对上页封装的查询进行验证

接下来就告一段落啦~