求助:Flask 开发中的 Sqlite3 的困惑

2013-02-03 21:02:53 +08:00
 Hualin
如前,我最近业余时间在写一个网站,遇到如下困惑,请大家帮忙:
1. 数据库(sqlite3)中的数据类型真的有用吗?我写的网站有几张有十几个 field 的表单有反复提交和显示。之前开发的时候我做了一个 trick —— 在 template 和 python 响应函数中都用循环来提取 field 中的信息,包括:在数据库中读取,在数据库中写入,在 template 渲染,在template 获取 form 提交。

昨天我编到,需要从 template 中读取 input form 中的数据来对数据库相应表单进行更新,假设:

in sqlite3:
table f1b1 (
subject_id integer not null primary key,
status boolean default 0, field01 string default null,

)
4566 次点击
所在节点    Python
15 条回复
diib
2013-02-03 21:30:43 +08:00
sqlite3 的数据类型都是基于text的。
diib
2013-02-03 21:35:49 +08:00
另外貌似这个帖子没写完?似乎读不懂……
Hualin
2013-02-03 23:51:13 +08:00
@diib 对 刚点错啦 马上补上
yoyicue
2013-02-04 00:08:29 +08:00
为啥不用 sqlalchemy 和 wtforms 呢?
yoyicue
2013-02-04 00:10:20 +08:00
Hualin
2013-02-04 00:11:47 +08:00
@yoyicue 不是选什么数据库的问题,问题出在从 template 获取 request.form['some_keyword'] 的 value 是 unicode, 然后再注入数据库的时候 数据类型的转换不是很智能。

flask 自己没有完整的数据库逻辑 不像 django 。至少我理解的是这样。
yoyicue
2013-02-04 00:12:25 +08:00
我在点击回复的瞬间 猫跳上键盘 敲了个 m,
Hualin
2013-02-04 00:13:38 +08:00
@yoyicue well honestly, 我不是很 appreciate 你这样的回答,不解决当前的实际问题。
yoyicue
2013-02-04 00:15:38 +08:00
@Hualin

你没理解我的意思, 我没说用什么数据库的问题,
总之用了 sqlalchemy 和 wtforms 从来没有这个烦恼.
使用 extensions 也是官方推荐的.
Hualin
2013-02-04 00:17:55 +08:00
@yoyicue 好吧 我觉得我需要解决燃眉之急。我还是找找 python unicide 数据类型 有没有比较智能的数据类型转换方法算了。 thx anyway
yoyicue
2013-02-04 00:18:24 +08:00
@Hualin 呵呵 那你自己慢慢考虑吧
人生苦短 用不用 ORM 自己决定
yegle
2013-02-04 00:28:27 +08:00
@Hualin

有一个通用的解决方案是,表只存一个field,把要存的数据保存成dict,json.dumps成字符串保存到数据库里

为了保证你的代码通用性(sqlite3不满足需求,需要用MySQL怎么办?),保证安全性(『手动拼接SQL是SQL注入万恶之源』),还是用ORM吧。

另外,如果觉得flask没有好用的数据库逻辑,你总是可以from django.db import models的
Hualin
2013-02-04 00:44:32 +08:00
@yegle django 太“强大”了,我还玩不转。
我就是手动拼接sql 语句的 T.T

我在想我要不要把数据库里的东西全存成 string 类型,这样我对每个 field 的操作都是 用引号 wrap 一下。反正我也不用 sqlite 单独做什么就是存个东西而已。

今天才知道 orm ,,,还是后面再学学吧。
diib
2013-02-04 07:44:18 +08:00
不要直接拼sql,如果暂时不用orm,那么就把网页传回来的信息每一个都检查一遍,并转换成对应的数据类型,然后用参数化的方式构建sql语句并执行。虽然繁琐了些。。。
Hualin
2013-02-05 00:36:22 +08:00
@diib 的确 我已经开始用 flask-sqlalchemy 真的感谢大家的建议。
另外 你们开始学开发的时候是怎么知道拼接 sql 很危险?any further reading?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/59673

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX