zoukankan      html  css  js  c++  java
  • 自动生成建表语句

    # 创建类的时候要生成建表的语句 如何知道创建一个类了


    class Mymetaclass(type):
    # 创建类时自动调用
    def __init__(self,class_name,class_bases,class_dic):
    # print(self)
    # print(class_name)
    # print(class_bases)
    table_name = class_name
    print(class_dic)

    # 拼接一下
    columns = []
    # create table 库名.表名(
    # 字段名1 字段的数据类型[(宽度) 约束条件]
    # sql = 'create table 表名(字段名 字段的类型[(宽度) 约束条件])'
    # 不能写死,就将类名当做表名
    # table_name = class_name
    # 需要分析类来确定表有哪些字段
    # 应该在创建类时,就要明确有哪些字段
    # 表名能确定了,里面的name 字段的类型[(宽度) 约束条件]这些还不确定
    # 用循环取出来,拼接成建表语句
    for k,field in class_dic.items(): #items是把字典里面的k,v转成一个元组的形式,元组第一个是k,第二个是v,然后通过解压赋值赋值给他们两个
    if isinstance(field,Field):
    fs = '%s %s'%(field.name,field.column_type)
    # print(fs)
    if field.primary_key:
    fs+=' primary key'
    if field.increment:
    fs+=' auto_increment'

    columns.append(fs)
    # print(columns)
    columns = ','.join(columns)
    # print(columns)

    # 生成最终的sql语句,分号不用加
    # sql = 'create table 表名(id int primary key auto_increment,name varchar(20))'
    sql = 'create table %s(%s)'%(table_name,columns)
    print(sql)

    # sql = 'create table class_name(name 字段的类型[(宽度) 约束条件])'
    # sql = 'create table class_name(id int primary key auto_increment ,
    # name varchar(20)
    # )'



    # 一个字段包含了多个信息,打包成对象
    # 不光要明确字段名称还需要知道类型,长度,约束(是否主键,是否增长,是否默认值)
    class Field:

    def __init__(self,name,column_type,primary_key = False,increment = False,default = None):
    self.name = name
    self.column_type = column_type
    self.primary_key = primary_key
    self.increment = increment
    self.default = default


    class User(metaclass=Mymetaclass):
    # 应该在创建类时,就要明确有哪些字段
    # 不光要明确字段名称还需要知道类型,长度,约束(是否主键,是否增长,是否默认值)
    # 可以把字段封装成一个对象
    id = Field('id','int',primary_key=True,increment=True)
    name = Field('name','varchar(20)')
    password = Field('password','varchar(20)')
    vip = Field('vip','tinyint',default=0)
    locked = Field('locked','tinyint',default=0)

    def __init__(self,name,password,vip,locked):
    self.name = name
    self.password = password
    self.vip = vip
    self.locked = locked
  • 相关阅读:
    SL复习笔记之平稳转型——基础篇(二、控件和数据访问)
    UML之用例图和类图
    SL复习笔记之平稳转型——基础篇(四、多媒体,工具提示和右键菜单)
    SL复习笔记之平稳转型——基础篇(一)
    SL复习笔记之平稳转型——基础篇(三、SL安装检测和用“刷子”刷出背景)
    平稳转型WP系列之在Windows Phone中谈“委托”、“事件”和“接口”(一、深入理解)
    UML建模之活动图和StarUML使用
    SL复习笔记之平稳转型——基础篇(五、数据绑定)
    使用html parser
    设计模式工厂模式
  • 原文地址:https://www.cnblogs.com/zhangrenguo/p/10034481.html
Copyright © 2011-2022 走看看