经开区网站建设,在一起做网店的网站的怎么购买,如何做好网站优化,wordpress 创建招生网tornado 08 数据库-ORM-SQLAlchemy-表关系和简单登录注册 引言 #在数据库#xff0c;所谓表关系#xff0c;只是人为认为的添加上去的表与表之间的关系#xff0c;只是逻辑上认为的关系#xff0c;实际上数据库里面的表之间并没有所谓的表关系 一、一对一表关系 Module #需…tornado 08 数据库-ORM-SQLAlchemy-表关系和简单登录注册 引言 #在数据库所谓表关系只是人为认为的添加上去的表与表之间的关系只是逻辑上认为的关系实际上数据库里面的表之间并没有所谓的表关系 一、一对一表关系 Module #需要先创建对应的Module这里采用之前建立好的User和UserDetailsrelationship
from sqlalchemyorm import relationship #在Userdatails中添加如下代码
userdetail relationship(User,backrefdetails,uselistFalse,cascadeall)#使用
row session.query(User).get(1)
rows.details relationship userdetail relationship(User,backref details,uselistFalse,cascadeall) #在使用relationship的时候上面必须要有ForeignKey
#类名 User表示关联的Module
# 在子类中通过relationship里面的backref向父类User加上details这个属性
#uselistFalse 代表relationship不再表示一对多关系了表示一对一的关系了
#cascade表示自动关系处理就和mysql中的ON DELETE 类似
#cascade所有的可选字符串项1、all,所有操作都会自动处理到关联对象上2、save_update关联对象自动添加到会话3、delete关联对象自动从会话中删除4、delete-orphan属性中去掉关联对象则会话中会自动删除关联对象5、mergesession.merge()是会处理关联对象6、refresh-expiresession.expire()时会处理关联对象7、expunge,session.expunge()时会处理关联对象#自动添加属性
#在刚才这里User里面本来是没有details这个属性的但是在UserDetails里面添加relationship之后User实例会自动添加上details属性#relationship
#表关系是逻辑关系但是mysql中并没有直接说明表关系的东西外键约束是一个表现形式外键是一种表之间的约束可以用来表示这种关系
#在SQLAlchemy里面这个relationship代表了一对多的关系当然我们可以通过参数改变关系它默认为是一对多的关系而这个关系是SQLAlchemy里面的和数据库并没有什么关系但是relationship是和外键一起使用的 #在relationship.py中输入一下代码from connect import session
from user_modules import User,UserDetailsrows session.query(User).get(2) #获得id为2的数据信息
print(rows)
print(rows.username)
print(rows.details)rows session.query(UserDetails).get(1)
print(rows)
print(rows.userdetail) #只要确定好一对一的关系子类的userdetail和父类的details属性都可以得到对应的数据 二、多对多关系 #用户与服务器之间的关系可以看成是一对多的关系但是用户转载的关系就可以看成是多对多的关系如何在SQLAlchemy表示多对多的关系呢 #在user_modules.py里面添加记得要导入Table模块
from sqlalchemy import Tableuser_article Table(user_article,Base.metadata,Column(user_id,Integer,ForeignKey(user.id),primary_keyTrue),Column(article_id,Integer,ForeignKey(article.id),primary_keyTrue)) #中间表写法class Article(Base): #文章Module__tablename__ articleid Column(Integer,primary_keyTrue,autoincrementTrue)content Column(String(500),nullableTrue)create_time Column(DateTime,defaultdatetime.now)article_user relationship(User,backrefarticle,secondaryuser_article)#跟上面的区别在于没有uselistsecondary参数传入中间表def __repr__(self):return Article(id%s,content%s,create_time%s)%(self.id,self.content,self.create_time) 三、包管理 #把Module写好以后该如何导入呢 #在模块中直接导入
from data.user_modules import User #从data包下面的user_modules.py里面导入User #这就会涉及到包管理#包的概念
#把很多模块放到一个文件夹里面就可以形成一个包#包管理
#当把很多模块放在文件夹中的时候为了方便引用包中的模块引入包管理__init__.py
#在包管理中加入此模块则包名可以直接通过属性访问的方式访问此模块内的对象此模块不加上可能不会报错但是规范是要加上文件内容可以为空#相对路径导入
#在包管理中可以通过.一个点和..两个点分别来导入同层和上一层的模块 #相对路径导入#引入作用
#在包中如果包中模块要导入同一包中的其他模块就必须使用此方法导入#使用方法
from .module(..module) import obj (as new_name)#引入以后的影响
#当一个模块中出现此导入方式则该模块不能被直接运行直接被导入 四、简单的登录 import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
from tornado.options import define,options
import time
import util.ui_methods
import util.ui_modules
from data.user_modules import User #导入module包
define(port,default8080,help run port,typeint)
def haha():return this is hahahaahclass LoginHandler(tornado.web.RequestHandler):def get(self, *args, **kwargs):self.render(lesson2.html)def post(self, *args, **kwargs):user self.get_arguments(name)password self.get_argument(password,)username User.by_name(user)if username and password username[0].password:self.render(login_07.html,username username)else:self.write(用户名或密码错误)application tornado.web.Application(handlers[(r/login,LoginHandler),],template_path templates,static_path static,autoescape None,ui_methodsutil.ui_methods,ui_modulesutil.ui_modules,debugTrue)if __name__ __main__:tornado.options.parse_command_line()http_server tornado.httpserver.HTTPServer(application)http_server.listen(options.port)tornado.ioloop.IOLoop.instance().start() !DOCTYPE html
html langen
headmeta charsetUTF-8titleTitle/titlelink relstylesheet hrefcss/bootstrap.cssstyle* {margin: 0;padding: 0;}/style
/head
body{% if username %}欢迎用户{{ username }}登录brimg src{{ static_url(images/1.jpg)}} width250 height250br{% else %}您还没有登录{% end %}
/body
/html #在user_module.py里面导入
from .connect import Base,session#在User类里面写入classmethoddef by_name(cls,name):return session.query(cls).filter(cls.usernamename).all() #通过装饰器来获取类名 转载于:https://www.cnblogs.com/xuchengcheng1215/p/9028537.html