flask创建mysql表_flask-sqlalchemy动态创建数据表

flask-sqlalchemy 实际上是基于sqlchemy再次封装的库在动态创建数据表时执行失败报了类似sql语法错误的报错反复查找并没有找到结果

sql语句打印后执行完全没有问题

主代码

param = json.dumps(request.form)

param = json.loads(param)

table_name = param.pop('name')

column_str = ''

for x in range(len(param)/4):

name = param.get('name%s'%(x))

getunique = param.get('unique%s'%(x))

gettype = param.get('type%s'%(x))

getlen = int(param.get('len%d'%(x)))

column_str += '`%(name)s` %(type)s(%(len)s) DEFAULT NULL %(unique)s,'%({'name':name,'type':gettype,'len':getlen,'unique':getunique})

# SET FOREIGN_KEY_CHECKS=0;

# DROP TABLE IF EXISTS `%(table_name)s`;

# ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

creat_sql = r'''CREATE TABLE `%(table_name)s` (`id` int(11) NOT NULL AUTO_INCREMENT,%(column_str)s PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;'''%({'table_name':table_name,'column_str':column_str})

print(creat_sql)

db.session.execute(creat_sql).fetchall()

db.session.commit()

生成sql

SET FOREIGN_KEY_CHECKS=0;DROP TABLE IF EXISTS `test`;CREATE TABLE `test` (`id` int(11) NOT NULL AUTO_INCREMENT,`a` int(16) DEFAULT NULL unique,`b` varchar(32) DEFAULT NULL unique, PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

报错

raise errorclass(errno, errval)

ProgrammingError: (pymysql.err.ProgrammingError) (1064, u"You have an error in y

our SQL syntax; check the manual that corresponds to your MySQL server version f

or the right syntax to use near 'CREATE TABLE `test` (`id` int(11) NOT NULL AUTO

_INCREMENT,`a` int(16) DEFAULT NU' at line 1") [SQL: u'DROP TABLE IF EXISTS `tes

t`;CREATE TABLE `test` (`id` int(11) NOT NULL AUTO_INCREMENT,`a` int(16) DEFAULT

NULL unique,`b` varchar(32) DEFAULT NULL unique, PRIMARY KEY (`id`)) ENGINE=MyI

SAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;'] (Background on this error at: http:

//sqlalche.me/e/f405)

里面的\n\r什么的都去除过了,有帖子说需要pymysql.escape_string()进行转义都试过了无法处理

上面的方法不能让我创建数据表

最后查阅了手册很久尝试了Table方法

colums.append(tablename)

colums.append(db.Column('id',db.Integer, primary_key=True,comment="ID"))

colums.append(db.Column('url',db.String(255),comment=u"来源"))

colums.append(db.Column('date',db.DateTime,comment=u"记录时间"))

colums.append(db.Column('status',db.Integer,comment=u"是否回访"))

re = db.Table(*colums)

db.create_all()

数据表创建成功!这样就可以动态参数动态的创建数据表了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值