V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
LiuXuFei
V2EX  ›  Python

Flask 蓝图动态 URL 前缀用做数据库前缀如何实现?

  •  
  •   LiuXuFei ·
    liuxufei · 2016-08-10 14:01:21 +08:00 · 3314 次点击
    这是一个创建于 3053 天前的主题,其中的信息可能已经有所发展或是发生改变。

    根据文章“Flask 蓝图中使用动态 URL 前缀”,我想使用这个 URL 前缀做为数据库表前缀,如何使用?

    以下为类比,或者有其他的方式?

    # -*- coding: utf-8 -*-
    from application import db
    
    class User(db.Model):
        # prefix 为数据库表前缀
        __tablename__ = prefix + 'users'
    
        id = db.Column(db.Integer, primary_key = True)
        nickname = db.Column(db.String(64), index = True, unique = True)
        email = db.Column(db.String(120), index = True, unique = True)
    
        def __repr__(self):
            return '<User %r>' % (self.nickname)
    
    9 条回复    2016-08-11 16:31:42 +08:00
    gotounix
        1
    gotounix  
       2016-08-11 11:45:14 +08:00
    你这样做完全没有意义啊。数据库表名基本是不变的, Blueprint 做的 URL 可以变更,如果你改了 URL ,你还要手动去改表名,如果有关联表,那就更悲剧了。何必呢?
    tumb8r
        2
    tumb8r  
       2016-08-11 13:34:03 +08:00
    。。。。有谁会去随意改动数据库表名。。。
    LiuXuFei
        3
    LiuXuFei  
    OP
       2016-08-11 14:29:19 +08:00
    @gotounix
    @tumb8r 可能我没说清楚,这么说吧

    有两个子站前缀分别为 aaa 和 bbb

    分别有三张表:
    aaa_users 、 aaa_posts 、 aaa_comments
    bbb_users 、 bbb_posts 、 bbb_comments

    后期可能随时会在增加子站,但是数据库还是增加相同(可以手动),只是数据库表前缀用 url 这个前缀变量。
    gotounix
        4
    gotounix  
       2016-08-11 14:42:08 +08:00
    新建一个 constant.py ,把表名全部写到这里面,只能加不能改, views 和 models 都 import 这个文件取 prefix 。
    LiuXuFei
        5
    LiuXuFei  
    OP
       2016-08-11 14:45:50 +08:00
    @gotounix
    这样反而麻烦了,我现在根据这篇文章( https://segmentfault.com/a/1190000002480266 )。
    目前只是不知道怎么把 g.user_url_slug 变量用到我上面代码的 prefix 中?
    gotounix
        6
    gotounix  
       2016-08-11 14:55:32 +08:00
    @LiuXuFei 这样麻烦?这样可以非常有效的避免重复。
    LiuXuFei
        7
    LiuXuFei  
    OP
       2016-08-11 15:01:10 +08:00
    @gotounix 我不知道我的这种方式能不能做到。如果可以也不会重复啊。还不需要记录表名。
    gotounix
        8
    gotounix  
       2016-08-11 15:25:54 +08:00   ❤️ 1
    @LiuXuFei g 是当前请求的全局变量,不同的请求对应不同的全局变量,不同的用户的 user_url_slug 是不一样的。
    你去看看 blueprint 的应用和 flask 的上下文吧。
    LiuXuFei
        9
    LiuXuFei  
    OP
       2016-08-11 16:31:42 +08:00
    @gotounix 哦,谢谢提示,然怪了,那有没有其他的方式获取不同子站,不同变量前缀的?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3063 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 13:22 · PVG 21:22 · LAX 05:22 · JFK 08:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.