编写Model

结合上文编写完ORM,我们就可以把博客中需要用到的Uers,blogs以及comments各自的信息,存储到数据库的三个表中,并透过使用Model表示出来。

编写代码如下:

#!usr/bin/env python
# -*- coding: utf-8 -*-

'''
创建model
'''


__author__='Seiei'

import uuid,time
import asyncio
from web_app import orm
from web_app.orm import Model,StringField,IntegerField,BooleanField,TextField,FloatField
#from orm import Model,StringField,IntegerField,BooleanField,TextField,FloatField

def next_id():#随机生成id
return '%015d%s000'%(int(time.time()*1000),uuid.uuid4().hex)

class User(Model):
__table__ = 'users'
id = StringField(primary_key=True, default=next_id, ddl='varchar(50)')
email = StringField(ddl='varchar(50)')
passwd = StringField(ddl='varchar(50)')
admin = BooleanField()
name = StringField(ddl='varchar(50)')
image = StringField(ddl='varchar(500)')#注意由于是image,所以这里接受字节是500
create_at = FloatField(default=time.time)

class Blog(Model):
__table__ = 'blogs'
id = StringField(primary_key=True, default=next_id,ddl='varchar(50)')
user_id = StringField(ddl='varchar(50)')
user_name = StringField(ddl='varchar(50)')
user_image = StringField(ddl='varchar(500)')
name = StringField(ddl='varchar(50)')
summary = StringField(ddl='varchar(200)')
content = TextField()
create_at = FloatField(default=time.time)

class Comment(Model):
__table__ = 'comments'
id = StringField(primary_key=True, default=next_id, ddl='varchar(50)')
blog_id = StringField(ddl='varchar(50)')
user_id = StringField(ddl='varchar(50)')
user_name = StringField(ddl='varchar(50)')
user_image = StringField(ddl='varchar(500)')
content = TextField()
create_at = FloatField(default=time.time)


if __name__== '__main__':

async def test():
await orm.create_pool(loop,user='www-data', password='www-data', db='awesome')
u = User(name='Test', email='test@example.com', passwd='123456780', image='about:blank')
await u.save()
a = await u.findall() #这个要打印才显示出来
print(a)

loop = asyncio.get_event_loop()
loop.run_until_complete(test())
orm.__pool.close() #在关闭event loop之前,首先需要关闭连接池。
loop.run_until_complete(orm.__pool.wait_closed())#在关闭event loop之前,首先需要关闭连接池。
loop.close()

在编写完Model代码后,我自行添加了数据访问代码,试着检测一下所写ORM以及Model是否有误。
但在此之前,得先初始化数据库表

初始化数据库表

我是直接使用Python中的mysql模块对数据库进行操作。教程可看廖老师的,或看详细的官方文档。

代码如下:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

__author__ = 'Seiei'

import mysql.connector

conn = mysql.connector.connect(user='root', password='password', database='awesome')#连接MySQL数据库中的awesome数据库
cursor = conn.cursor()#创建游标
cursor.execute('create table users (id varchar(50) primary key,email varchar(50),passwd varchar(50),name varchar(50),image varchar(500),admin boolean,create_at real)')#创建users表-->表列都要定义名字及类型,主键后还要跟primary key
cursor.execute('
create table blogs (id varchar(50) primary key,user_id varchar(50),user_name varchar(50),user_image varchar(500),name varchar(50),summary varchar(200),content text,create_at real)')#创建blogs表
cursor.execute('
create table comments (id varchar(50) primary key,blog_id varchar(50),user_id varchar(50),user_name varchar(50),user_image varchar(500),content text,create_at real)')#创建comments表
cursor.close()
conn.commit()
conn.close()

更多相关文章

  1. 用于Python项目的低内存和最快查询数据库
  2. 如何让django芹菜写入测试数据库进行功能测试?
  3. 28.mysql数据库之查询
  4. 运用Python语言编写获取Linux基本系统信息(三):Python与数据库编
  5. 独立于数据库的MAX()函数在SQLAlchemy中
  6. python--数据库支持
  7. Django 基础(一),项目创建、URL路由、数据库操作、模版
  8. Linux环境编译安装Mysql数据库
  9. Linux下安装MySql数据库

随机推荐

  1. Android开发资源完全汇总(转MatthewChen
  2. Handler机制情景分析
  3. use '@foo' to launch a virtual device
  4. android 双向滑动 稍加改进,可做成QQHD效
  5. Android Studio 下载安装教程
  6. 【Unity3D】与Android相互传递消息
  7. Android开机动画过程
  8. android TextView 阴影效果,和使用style学
  9. android测试
  10. 沉浸式状态栏StatusBar