Python-Web框架之 - 利用SQLALchemy创建与数据库…
2018-06-18 02:43:08来源:未知 阅读 ()
经过这个小项目算是对Django与Flask这两个web框架有了新的认识 , Django本身的轮子非常齐全 , 套路也很固定 , 新手在接触Django框架时 , 不会陷入到处找轮子的大坑 ;
那么在使用Flask这个框架的时候会碰到哪些大坑呢 , 首先Flask是一个轻量级的web框架 , 之所以说它轻量级是因为它本身并没有多少轮子 , 那是不是就代表这些轮子需要我们自己来造呢 , 那倒不必 , 但是需要我们去找这些轮子 , 这恰恰是锻炼你的思维的时候 , 你要找轮子之前 , 你必须得知道需要哪些轮子 , 这些轮子起到什么作用 , 知道了这些之后 , 进行下一步 ;
重点来了 , 这里所说的轮子到底是指什么呢 , 为什么说它坑呢 , Flask这个框架的文档和资料远没有Django那么丰富和清晰 , 你可能在网上能找到一些看似是你需要的资料 , 但是它很有可能里面用到的模块、驱动会有各种版本不一致的大坑 , 从东拼西凑来的轮子弄到一起可能会出现各种报错 , 这个时候你就得一个报错一个报错的解决 , 去查这个报错的原因 , 去查东拼西凑的模块的文档说明 , 这里要用到的MySQL驱动就有很多种版本 , PyMySQL、MySQLdb、mysql-connector、mysql-connector-python , 如果你选择MySQLdb , 那恭喜你这个是python2.x的版本 , 如果你选择了mysql-connector-python , 那又要恭喜你 ,这个只支持到python3.4 哈哈 , 如果选择PyMySQL , 虽然程序可以运行 , 但是会有各种警告之类的长串的红色字体 , 看着就很烦 , 经过实测选择mysql-connector不会有什么问题 ;
另外 , 还有一些使用数据库增删改查语句的坑 , 数据库语句可不像python语句那么干净 , 有些语句末尾要加分号 , 有些末尾又不需要加 , 有时候甚至还有对象单数和复数的区别 , 稍不留神儿你的语句就没效果或者报错 .
最后直接上源码和一些笔记吧...
# coding=utf-8 from flask import Flask # SQLALchemy可以理解为python和数据库之间关联的工具 from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) # 配置数据库的地址URI , 格式 "数据库类型+数据库驱动名称://用户名:密码@机器地址:端口号/数据库名" , 端口号可以不写. # python3中用的mysql驱动是mysql-connector , 已经不支持python2的MySQLdb驱动. app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+mysqlconnector://root:password@127.0.0.1/sql_demo" # 跟踪数据库的修改 --> 不建议开启 , 一是消耗性能 , 二是未来的版本中会移除. app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False # 将app作为参数传入这个关联工具 , 创建一个两者相关联对象db db = SQLAlchemy(app) # 创建数据库的模型 , 需要继承db.Model模型 class Role(db.Model): """创建角色类""" # 定义表名 __tablename__ = "roles" # 定义字段 # db.Column表示是一个字段 , db.Integer就代表id这个字段的数据类型是整数 , primary_key代表主键 , 是作为表的行的唯一标识. # db.String代表是字符串类型 , 字符串长度定义个n个字节 , unique(唯一的) , unique=True代表这列不允许出现重复的值 id = db.Column(db.Integer,primary_key=True) name = db.Column(db.String(100),unique=True) # 在"一对多"的一中定义users_role属性 , 该属性不会出现在字段中 , 后面的backref="role"是给User反向引用的 # 由于是"一对多" , 所以"多"的地方用User参数 , "一"的地方用不加s的实例对象参数role users_role = db.relationship("User",backref="role") def __repr__(self): """返回定制对象输出信息 , 与__str__作用类似""" return "Role:%d %s"%(self.id,self.name) class User(db.Model): """创建用户类""" __tablename__ = "users" id = db.Column(db.Integer,primary_key=True) name = db.Column(db.String(100),unique=True) password = db.Column(db.String(100)) # 每个人的密码不要求不同 , 可以不用指定unique=True email = db.Column(db.String(100),unique=True) role_id = db.Column(db.Integer,db.ForeignKey("roles.id")) # db.ForeignKey定义外键 , 参数是 表名.id def __repr__(self): """返回定制对象输出信息 , 与__str__作用类似""" return "User:%d %s %s %s"%(self.id,self.name,self.password,self.email) # 定义创建role和user实例对象的函数. def role_user_make(): role1 = Role(name="admin") role2 = Role(name="user") db.session.add_all([role1,role2]) db.session.commit() user1 = User(name="Tom", password="XYZ456", email="tom@163.com", role_id=role1.id) user2 = User(name="Jack", password="CB_4321", email="jack@163.com", role_id=role2.id) user3 = User(name="Alan", password="Zj@321", email="alan@163.com", role_id=role2.id) user4 = User(name="Mark", password="111222", email="mark@163.com", role_id=role2.id) db.session.add_all([user1,user2,user3,user4]) db.session.commit() @app.route("/") def index(): return "hello world" if __name__ == '__main__': # 删除表 , 在创建表之前先删除表 db.drop_all() # 创建表 db.create_all() role_user_make() app.run(debug=True)
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 使用scrapy框架爬取全书网书籍信息。 2019-08-13
- 利用python自动生成verilog模块例化模板 2019-08-13
- 网络编程相关知识点 2019-08-13
- 浅谈 Web框架 2019-08-13
- django框架使用及创建项目 2019-07-24
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash