小编the*_*hey的帖子

SQLAlchemy 中 .join() 和 .has() / .any() 之间的区别

设计更智能的查询方法。目前设计用于检索目的的查询是:

query_retrieve = self.session.query(Assessment_Result).\
            filter(Assessment_Result.owner.has(User.username == owner)).\
            filter(Assessment_Result.assessment.has(Assessment.name == assessment)).one()
Run Code Online (Sandbox Code Playgroud)

它利用了 SQLAlchemy 的EXISTS关键字。这在运行时有效nosetests,但稍后会出现问题。我需要使用.join()执行相同类型的比较和返回的方法来设计更好的查询方法.one()。更重要的是,我想更好地理解为什么该.join()方法是一种有效的查询方法。

我花了一些时间尝试分解 SQLAlchemy 文档,并发现以下信息很有用,但在设计查询方法.join()以及为什么它更好时可以使用更多帮助。[版本:Python 2.7.9 和 SQLAlchemy 1.0.9]

基于文档

Query.join()推荐形式:

如果没有外键或没有外键,则使用以下形式之一时 Query.join() 效果会更好:

query.join(Address, User.id==Address.user_id)    # explicit condition
query.join(User.addresses)                       # specify relationship from left to right
query.join(Address, User.addresses)              # same, with explicit target
query.join('addresses')                          # same, using a string
Run Code Online (Sandbox Code Playgroud)

布尔运算符:.has()and .any()(我上面的代码)

SQL 中的 EXISTS 关键字是一个布尔运算符,如果给定表达式包含任何行,则返回 True。它可以在许多场景中代替连接使用,并且对于定位相关表中没有对应行的行也很有用。

桌子设计:

class Assessment_Result(Base): …
Run Code Online (Sandbox Code Playgroud)

python rdbms many-to-many join sqlalchemy

8
推荐指数
0
解决办法
5541
查看次数

高级:如何在Jinja2中使用href

我想hrefjinja2模板中使用,根据具体结果将用户发送到特定结果,id以了解有关该特定结果的更多信息.我创建了一个routeurl:('view_assessment_result', '/view_assessment_result/{id}')根据具体结果呈现所有细节id.

我想做的事情:
当用户点击该ID号码时,他们将被发送到路线view_assessment_result/{some_id},该路线将根据id迭代中找到的内容呈现该页面的细节for a in assessment....我试着调查案例,但其他人似乎正在使用Flask,我没有使用.下面的模板代码无法完成手头的任务.

见下面的代码:

路由配置:

    #Route convention: resource 'name' 'url dispath'
    config.add_route('view_assessment_result', '/view_assessment_result/{id}')
Run Code Online (Sandbox Code Playgroud)

jinja模板

        <tr>
        {% for a in assessment_results %}
                <td><a href="{{ '/view_assessment_result' }}">{{ a.id }}</a></td>
            <td>{{ a.owner }}</td>
            <td>{{a.assessment }}</td>
        </tr>
        {% endfor %}
Run Code Online (Sandbox Code Playgroud)

查看呈现href上面发送的特定结果的配置:

@view_config(route_name='view_assessment_result', request_method='GET', renderer='templates/analyst_view.jinja2')
def view_assessment_result(request):
    with transaction.manager:
        assessment_result_id = int(request.matchdict['id'])
        assessment_result = api.retrieve_assessment_result(assessment_result_id)
        if not …
Run Code Online (Sandbox Code Playgroud)

python jinja2 pyramid

6
推荐指数
1
解决办法
7676
查看次数

IntegrityError:错误:列“user_id”中的空值违反了非空约束

使用:postgres(PostgreSQL)9.4.5

我刚刚将一个sqlite3数据库迁移到一个postgresql数据库上。由于某种原因,自此迁移以来,当我尝试创建用户时,user_id会引发有关(这是主键)的错误。以前这不是问题sqlite3。我花了时间浏览文档和堆栈问题,但仍然感到困惑。

里面api.create_user()

api.create_user(username ='lola ', firstname ='cats ', lastname ='lcatk', email='cags@falc.com')
Run Code Online (Sandbox Code Playgroud)

sqlalchemy 数据库模型:

class User(Base):
    __tablename__ = 'users'

    #user_id = Column(Integer, primary_key=True)
    #changed to:
    id = Column(Integer, primary_key=True)
    username = Column(String(50))
    firstname = Column(String(50))
    lastname = Column(String(50))
    email = Column(String(300))
    password = Column(String(12))
    institution = Column(String(50))

    def __init__(self, username, firstname, lastname, email):
        self.username = username
        self.firstname = firstname
        self.lastname = lastname
        self.email = email

    def __repr__(self):
        return "<User(username …
Run Code Online (Sandbox Code Playgroud)

python postgresql sqlalchemy primary-key pyramid

5
推荐指数
1
解决办法
2万
查看次数

存储和验证加密密码以便在Pyramid中登录

我试图login在Pyramid中验证加密密码.因此,如果用户和密码匹配,则系统将授权用户.目前我发现在数据库中加密密码并且输入金字塔login形式的密码未加密时,编写一个比较密码的函数很困难.现在,我没有在登录视图中进行验证.

我是处理安全措施/代码的整个过程的新手,并希望这样做.我正在看这个Auth教程,但是User课堂上的加密略有不同,我正在使用Pyramid的Auth工具包.任何关于如何成功和巧妙地做到这一点的指导将受到高度赞赏.

软件:Python 2.7.9,Pyramid 1.5.7,SQLAlchemy 1.0.9


数据库类:

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    username = Column(String(15), nullable=False, unique=True)
    email = Column(String(300))
    password = Column(String(300), nullable=False)

    def __init__(self, username, password, email):
        self.username = username
        self.password = hashlib.sha224(password).hexdigest()
        self.email = email

    def __repr__(self):
        return "<User(username ='%s', password='%s', email='%s')>" % (self.username, self.password, self.email)
Run Code Online (Sandbox Code Playgroud)

意见

@view_config(route_name='login', renderer='templates/login.jinja2')
@forbidden_view_config(renderer='templates/login.jinja2')
def login(request):
    login_url = request.route_url('login')
    referrer = request.url
    if referrer == login_url:
        referrer = '/' …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy password-encryption pyramid

5
推荐指数
1
解决办法
6088
查看次数

使用sqlalchemy的'engine_from_config'

我试图在类的构造函数中使用engine_from_config()。互联网上的教程和资料如此混乱。我对此并不陌生,一直在努力完成似乎很简单的任务。感谢在构造函数中实现.engine_from_config()的任何帮助!

这对我来说很有意义:

class BaseAPI(object):
     _userclass = None 
     _userassessment = None    
def __init__(self, config, prefix='sqlalchemy.', **kwargs):
    assert self_userclass is not None

    config = {'sqlalchemy.url': 
    'sqlite:///./somedb.db', 'sqlalchemy.echo':'True'}
    self.engine = sqlalchemy.engine_from_config(config)

    dbSession = scoped_session(sessionmaker(autoflush = True,
                                            autocommit = False,
                                            bind = engine))
    Base.metadata.create_all(bind=engine)
    print('--start DB Session--')
    return dbSession
Run Code Online (Sandbox Code Playgroud)

但是在教程中,我读到了实现sqlalchemy.engine_from_config的方法是这样的:

  options = dict((key[len(prefix):], configuration[key])
               for key in configuration
               if key.startswith(prefix))
options['_coerce_config'] = True
options.update(kwargs)
url = options.pop('db')
return create_engine(url, **options)
Run Code Online (Sandbox Code Playgroud)

我想我可能会考虑这个问题,或者稍后可能是一个名为sqlalchemy.engine_from_config的实际类。...为什么我的代码对我不起作用?

新的工作更改:

class BaseAPI(object):
    def __init__(self):
        config = {'sqlalchemy.url':'sqlite:///./somedb.db', 'sqlalchemy.echo':'True'}

        self.engine = …
Run Code Online (Sandbox Code Playgroud)

database constructor sqlalchemy python-2.7

4
推荐指数
1
解决办法
3457
查看次数

在sqlalchemy中的不同模块之间访问相同的db.session

我是sqlalchemy的新手,正在尝试弄清楚如何使事情更清洁和连接。

我创建了一个/ model base.py文档,在其中创建了一个会话并在表中(以及关系等)建立了所有实体。我想创建另一个模块,在其中我可以对base.py中的实体(表)进行CRUD操作。该文件称为object.py,具有BaseAPI(object)类,并且具有不同的功能“创建”,“读取”,“更新”和“删除”。我想确保我连接到object.py中的表(base.py)并在实体User上进行操作。在这种情况下,实体(表)为“用户”。

这就是我在API object.py doc中所拥有的:

#!/usr/bin/env python

from sqlalchemy import create_engine
from sqlalchemy.orm import relationship, backref, sessionmaker
from datetime import datetime, timedelta
import notssdb.model
from base import User #importing from the module base.py -- doesn't work

engine = create_engine('sqlite:///./notssdb.db', echo=True) #in-memory sql engine 

# create a Session
Session = sessionmaker(bind=engine)


class BaseAPI(object):
#    DBSession = scoped_session(sessionmaker(engine))
#    users = DBSession.query(User).all()

    def __init__ (self):
       session = Session()


# CREATE USER 

    def create_user(self, username, password, fullname):
        new_user = User(username, password, …
Run Code Online (Sandbox Code Playgroud)

python api session sqlalchemy crud

3
推荐指数
1
解决办法
1627
查看次数

RESTful更新密码

目标:使用RESTful服务安全可靠地更新用户密码.

我对使用最佳实践的工作流应该是什么感到困惑:
   1.)为知道现有密码的用户更新密码
   2.)如果用户忘记,重置密码.
   3.)URI(资源)是否RESTful?出于此Web应用程序的目的,我只需要GET和POST进行更改.

我相信我的代码可能是多余的.密码更新方法(如下所示)未正确更新密码.它正在改变它,但是当我尝试使用设置的新密码登录时new_password,密码不匹配.我同样遵循Michael Merickel的这个STACKs答案进行更新.

user = DBSession.query(User).filter_by(email = email).first()if user:user.password = new_password

感谢您的任何见解/输入.我是新手,想要正确编码.

所有这些都是通过HTML而不是JSON.
软件:Python 2.7.9,Pyramid 1.5.7,SQLAlchemy 1.0.9


资源: __init__.py

config.add_route('users', '/users')
config.add_route('user', '/users/{id:\d+}/{login}') #/{login} added login

config.add_route('reset_password', '/users/{username}/reset_password')#reset
config.add_route('new_password', '/users/{username}/new_password')#new
config.add_route('save_password', '/save_password')#new
Run Code Online (Sandbox Code Playgroud)

views.py

#http://0.0.0.0:6432/users/dorisday/reset_password <--like this
@view_config(route_name='reset_password', renderer='templates/password_recovery.jinja2')
def forgot_password(request):
    if request.method == 'GET':
        username = request.params['username']
        if username is not None:
            user = api.retrieve_user(username)

        return {}

#http://0.0.0.0:6432/users/macycat/new_password <--like this
@view_config(route_name='new_password', request_method='GET', renderer='templates/new_password.jinja2')
def new_password(request):
    logged_in_userid  = authenticated_userid(request) …
Run Code Online (Sandbox Code Playgroud)

python rest sqlalchemy pyramid

1
推荐指数
1
解决办法
737
查看次数

金字塔视图配置中的RESTful设计

这是我第一次尝试设计Web应用程序.我为SQLAlchemy数据库创建了一个CRUD操作API.我现在正在尝试使用Pyramid设计一个RESTful Web框架来支持这个DB及其所有实体.

我一直在努力研究如何进行PUT(更新).我知道我还需要纳入某些条件(例如Code 202).我不确定如何使用PUT处理对象替换.视图配置中的方法有点令人困惑,我相信我正在遵循db CRUD操作.

其次,我认为必须通过查找所有资源{id}.我相信我的get_user方法是正确的. User_id保存用户的所有信息db......因此,如果a user被查找,那么id我不需要拥有所有其他信息(参见delete_user方法).

我已经阅读了一些关于设计RESTful设计的精彩教程,但鉴于我是自学成才,我仍在苦苦挣扎.真的很感谢您的帮助!

以下是一些显示问题的代码示例:

_ init _.py(URIs):

config.add_route('post_user', '/users') # POST (HTTP) / CREATE (CRUD)
config.add_route('get_user', '/users/{id}') #GET (HTTP) / RETRIEVE (CRUD)
config.add_route('put_user', '/users/{id}') # PUT (HTTP) / UPDATE (CRUD)
config.add_route('delete_user', '/users/{id}') # DELETE (HTTP) / DELETE (CRUD)
Run Code Online (Sandbox Code Playgroud)

views.py(查看配置 - RESTful):

@view_defaults(renderer='json')
class RESTView(object):
    api = ConvenienceAPI() # CRUD API for database
    def __init__(self, request):
        self.request = request …
Run Code Online (Sandbox Code Playgroud)

python rest uri crud pyramid

0
推荐指数
1
解决办法
1575
查看次数

Grunt / Babel 错误:无法写入“dist”文件(错误代码:EISDIR)

我是 Grunt 及其所有插件的新手,但我想学习和设置一些很棒的前端工具。话虽如此,我一直在通过Github关注Grunt 文档以及 Grunt 和 Babel 的一些类似问题,但我似乎不断收到以下回溯:

Running "babel:dist" (babel) task
Warning: Unable to write "dist" file (Error code: EISDIR). Use --force to continue.

Aborted due to warnings.
Run Code Online (Sandbox Code Playgroud)

任何对这个新手更清晰的解释将不胜感激。我是 JS 编程和设置 DevOps 的新手,因此鼓励提供一些有用的提示和最佳实践。


设置:

js_practice/ (根项目)
|----package.json

所有发行版和包
|---node_modules/

服务器端(节点)支持
|---es6/
| ------ test.js
|---dist/

客户端(浏览器)支持
|----public/
|---es6/ (位于 public 文件夹内)
| ----- test2.js
|---dist/ (这是在公共文件夹中)

这是我当前的代码:

Grunt 文件.js

module.exports = function(grunt) {
        // All of your Grunt code must be specified inside this function!
        // …
Run Code Online (Sandbox Code Playgroud)

javascript node.js gruntjs grunt-babel

0
推荐指数
1
解决办法
1552
查看次数