• 自动生成建表语句


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


    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
  • 相关阅读:
    Linux系统中常用操作命令
    CentOS 7 巨大变动之 systemd 取代 SysV的Init
    不可不知的安卓屏幕知识
    Gradle-jar-aar
    【Android】开源项目汇总
    Android中关于系统Dialog无法全屏的问题(dialog样式)
    Android LockScreen (锁屏弹窗)
    linux 权限设置
    android 多语言(在APP里面内切换语言)
    host更新
  • 原文地址:https://www.cnblogs.com/zhangrenguo/p/10034481.html
Copyright © 2020-2023  润新知