Ejemplo n.º 1
0
def create_table(model):
    u'''创建 model 所需的表'''
    from django.db import connection  # 获取数据库连接
    from django.core.management.color import no_style  # Style是用来输出语句时着色的,没什么用
    from django.db.backends.base.creation import BaseDatabaseCreation  # 这个类就是用来生成SQL语句的。
    c = BaseDatabaseCreation(connection)
    create_sql = c.sql_create_model(model(), no_style())[0][0]  # 生成建表的SQL语句
    #print create_sql
    cursor = connection.cursor()
    cursor.execute(create_sql)  # 执行SQL
Ejemplo n.º 2
0
    def createTable(toTable, db, app_label = '', fields = None):
        """
        :param toTable:  表名
        :param db: 数据库名
        :param app_label: model所属app
        :param fields: [{field:字段名,cnname:字段注释,length:字段长度},{}]
        :return:
        """
        getAllToTableField = FieldTable.objects.filter(tableenglish=toTable)
        toTable = toTable.upper()
        class Meta:
           # print(app_label)
            #db_table = toTable
            pass
            #db_tablespace =
        if app_label:
            setattr(Meta, 'app_label', app_label)
            setattr(Meta, 'db_table', toTable+ '_' + app_label)
            # setattr(Meta, 'db_tablespace', app_label)
        else:
            print('app_label is not exits')
            return

        attr = {'__module__' : app_label + '.models', 'Meta': Meta}
        for num in range(len(getAllToTableField)):
            #if getAllToTableField[num].isPreKey == 1:
              #  attr[getAllToTableField[num].fieldenglish] = models.CharField(max_length=getAllToTableField[num].fieldlength,
               #                                                             primary_key=True, verbose_name = getAllToTableField[num].cnname)
                #attr['primary'] = (getAllToTableField[num].identifier)
            #else:
            if getAllToTableField[num].showtype == 'string' or getAllToTableField[num].showtype == 'date' or \
                            getAllToTableField[num].showtype == 'datetime':
                attr[getAllToTableField[num].fieldenglish] = models.CharField(
                    max_length=getAllToTableField[num].fieldlength, blank=True, null=True, verbose_name = getAllToTableField[num].fieldchinese)
            elif getAllToTableField[num].showtype == 'numeric':
                attr[getAllToTableField[num].fieldenglish] = models.IntegerField(blank=True, null=True, verbose_name = getAllToTableField[num].fieldchinese)
            elif getAllToTableField[num].showtype == 'binary':
                attr[getAllToTableField[num].fieldenglish] = models.BinaryField(blank=True, null=True, verbose_name = getAllToTableField[num].fieldchinese)
        if not fields is None:
            fields = json.loads(fields)
            for i in range(len(fields)):
                attr[fields[i]['field']] = models.CharField(max_length= fields[i]['length'] , blank= True, null= True, verbose_name= fields[i]['cnname'])
        classModel = type(toTable, (models.Model, ), attr)
        #classObject = type(classModel)
        from django.db import connections
        from django.db.backends.base.creation import BaseDatabaseCreation
        from django.core.management.color import no_style
        creation = BaseDatabaseCreation(connections[db])
        # print(creation)
        create_sql = creation.sql_create_model(classModel, no_style())[0]
        # print(create_sql)
        return classModel, create_sql
Ejemplo n.º 3
0
def create_table(model, connection=connection, transaction=transaction):
    '''
    @summary: 创建 model 所对应的表
    @param {django.db.models.Model} model: 生成表的 model 类
    @param connection: 数据库连接(有传则使用传来的,没有则用默认的,便于使用事务)
    @param transaction: 数据库连接的事务(有传则使用传来的,没有则用默认的)
    @raise : 执行有异常时抛出 RuntimeError 异常
    @return {string}: 建表语句
    '''
    c = BaseDatabaseCreation(connection)
    create_sql = c.sql_create_model(model(), no_style())[0][0]  # 生成建表的SQL语句
    execute_sql(create_sql, connection=connection,
                transaction=transaction)  # 执行SQL
    return create_sql
Ejemplo n.º 4
0
def create_table(model, connection=connection, transaction=transaction):
    """
    创建 model 所对应的表
    :param {django.db.models.Model} model: 生成表的 model 类
    :param connection: 数据库连接(有传则使用传来的,没有则用默认的,便于使用事务)
    :param transaction: 数据库连接的事务(有传则使用传来的,没有则用默认的)
    @raise : 执行有异常时抛出 RuntimeError 异常
    :return {string}: 建表语句
    """
    c = BaseDatabaseCreation(connection)
    create_sql = c.sql_create_model(model(), no_style())[0][0]  # 生成建表的SQL语句
    try:
        execute_sql(create_sql, connection=connection,
                    transaction=transaction)  # 执行SQL
    except:
        pass  # 可能表已存在
    return create_sql