在一次工作中,有这么一个问题,就是要导入的数据字段不确定,但是还想使用django的ORM来对数据进行操作。。 琢磨了许久,弄个不完善的方案,但功能是能实现的,主要是思路。
废话不多说了,丑陋的展示一下吧。。。
from django.db import connection
#粗陋的用数组和字符串表示一下要导入的数据表单项
lis = ['ll', 'bb', 'yy'] #表示要建立的表单字段
l = 'tablename' #表名
ll = 'fff'
new_table = connection.cursor() #获得游标,因为要在Django中使用原生sql语句。。。
# 创建表
new_table.execute("create table %s (id INT NOT NULL primary key )"%l) #先创建一个表,并定义主键
# 添加表元素 for i in lis: new_table.execute("alter table %s ADD %s varchar(40)"%(l,i)) #向表中插入字段,循环方式添加(图方便,全都定义字符串型)。
# 向表内写入数据new_table.execute('insert into %s (%s,%s,%s) values("gg1","gg2","gg3")'%(l,lis[0],lis[1],lis[2])) #通过xldr读的xlsx,xls文件,遍历导入即可。。
## 删除
# new_table.execute("drop table tablename")
# 将生成的数据通过语句反写回去 ###### 在view.py中 加入以下两条语句,便可将使用原生SQL语句导入数据库中的数据进行反写。 python manage.py inspectdb > datatools/models.py ####### os.system('python manage.py inspectdb > datatools/models.py')
# 动态调用新添加的表名
# k=l.title() # 首字母大写,因为model中类名首字母必须大写,自动反写后,表名首字母为大写
#
#动态的调用models.py中的表
# get_models = hasattr(datatools.models,k)
# if get_models:
# cls = getattr(datatools.models,k)
# bb = cls.objects.all()
# print(bb)