在Windows 8 x64下的virtualenv中运行Python,通过flask megatutorial工作.有一个非常全面的设置指南,我要做的一件事就是安装sqlalchemy-migrate.
我按照指南中给出的顺序执行此操作,没有跳过任何步骤.随着virtualenv活跃,注意使用正确的解释器,我运行:
pip install sqlalchemy-migrate
Run Code Online (Sandbox Code Playgroud)
在这一点上它会嘎吱作响并最终返回:
Installed c:\users\erez\code\flask-megatutorial\flask\build\sqlalchemy-migrate\pbr-0.5.23-py2.7.egg
running egg_info
creating pip-egg-info\sqlalchemy_migrate.egg-info
writing requirements to pip-egg-info\sqlalchemy_migrate.egg-info\requires.txt
writing pip-egg-info\sqlalchemy_migrate.egg-info\PKG-INFO
writing top-level names to pip-egg-info\sqlalchemy_migrate.egg-info\top_level.txt
writing dependency_links to pip-egg-info\sqlalchemy_migrate.egg-info\dependency_links.txt
writing entry points to pip-egg-info\sqlalchemy_migrate.egg-info\entry_points.txt
[pbr] Processing SOURCES.txt
writing manifest file 'pip-egg-info\sqlalchemy_migrate.egg-info\SOURCES.txt'
warning: LocalManifestMaker: standard file '-c' not found
error: The system cannot find the file specified
Run Code Online (Sandbox Code Playgroud)
而现在我被卡住了.:)用谷歌搜索出来的.似乎与PBR有关,无论是什么,但没有解决方案.还有一个pip.log文件,但它太大了,不能粘贴在这里,我知道StackOverflow对要点皱眉.如果你认为它会有所帮助,仍然乐意将它粘贴到一个要点上.
非常感激任何的帮助.
我有一个高级搜索界面,它将key:value对发送到我的flask应用程序.关键是要搜索的表中的列,值是要比较的条件.
下面是项目的示例查询,其中k是Projects表中的'tags'列,v是要搜索的标记.
projects = Projects.query.filter(getattr(Projects, k).like('%{}%'.format(v)))
Run Code Online (Sandbox Code Playgroud)
如果用户提交两个要搜索的标记,则v将是两个标记的列表.然后,我可以像这样查询数据库:
if len(v) == 2:
v1, v2 = v[0], v[1]
projects = Projects.query.filter(or_(
getattr(Projects, k).like('%{}%'.format(v1)),
getattr(Projects, k).like('%{}%'.format(v2)))
)
Run Code Online (Sandbox Code Playgroud)
是否有更好的方法来执行"OR"查询,其中标记的数量(在此示例中)是可变的?
如何编写代码以便它可以处理2个标签或10个标签?
我创建了一个User模型和Kid模型。在孩子模型中,我有:
parents = db.relationship('User', secondary=kids_users,
backref=db.backref('kids', lazy='dynamic'))
Run Code Online (Sandbox Code Playgroud)
辅助表定义如下所示:
kids_users = db.Table('kids_users',
db.Column('kid_id', db.Integer(), db.ForeignKey('kid.id')),
db.Column('user_id',db.Integer(), db.ForeignKey('user.id')))
Run Code Online (Sandbox Code Playgroud)
我的User模型不包含与此相关的任何内容,因为此代码可以完成所有操作。
情况是这样:当我查询时,some_kid.parents它返回了一个不错的数组:
[<User u'someuser@yahoo.com'>]
Run Code Online (Sandbox Code Playgroud)
但是当我查询周围的另一种方式时,some_user.kids它会返回一些sql查询:
SELECT kid.id AS kid_id, kid.first_name AS kid_first_name, kid.middle_name AS kid_middle_name, kid.last_name AS kid_last_name, kid.dob AS kid_dob, kid.profile_pic_small AS kid_profile_pic_small, kid.profile_pic_smallish AS kid_profile_pic_smallish, kid.profile_pic_med AS kid_profile_pic_med, kid.profile_pic_large AS kid_profile_pic_large, kid.gender AS kid_gender, kid.current_group AS kid_current_group, kid.status AS kid_status, kid.status_time AS kid_status_time, kid.potty_trained AS kid_potty_trained, kid.pending AS kid_pending, kid.scholarship AS kid_scholarship, …Run Code Online (Sandbox Code Playgroud) 我无法找出导致此错误的原因
TypeError: __init__() takes at most 2 arguments (3 given)
Run Code Online (Sandbox Code Playgroud)
这是指向
@user_blueprint.route('/login', methods=['GET', 'POST'])
def login():
if g.user.is_authenticated:
flash("You are already Logged in", 'warning')
return redirect(url_for('members'))
error = ""
form = LoginForm()
if request.method == 'POST':
if form.validate_on_submit():
user = User.query.filter_by(username=form.username.data).first()
if user is not None and bcrypt.check_password_hash(user.password, form.password.data):
login_user(user, remember=form.remember.data)
flash('You are sucessfuly Logged in', 'success')
return redirect(url_for('members'))
else:
error = "You have entered an incorrect username and password"
return render_template("front/login.html", forms=form, error=error)
Run Code Online (Sandbox Code Playgroud)
该LoginForm如下所示:
class LoginForm(Form):
username …Run Code Online (Sandbox Code Playgroud) 我一直在跟随Miguel Grinberg的Flask Web Development,并在尝试创建数据库角色时遇到麻烦.本书建议我使用以下命令来运行shell并生成python shell并创建数据库角色:
http://i.stack.imgur.com/BdMx5.png
但是当相同的命令它没有给我一个python shell,我可以编写命令.它只是启动服务器并运行程序,让我无法执行创建数据库角色所需的命令.
http://i.stack.imgur.com/czTqF.png
在这两种情况下,hello.py只是一个带有相关数据库类的简单烧瓶程序.不知道为什么会这样.我已经激活了虚拟环境并按照文本中的描述完成了所有操作.有什么想法吗?
这是hello.py中的全部代码
# imports
from flask.ext.sqlalchemy import SQLAlchemy
from flask import Flask, render_template
import os
from flask.ext.wtf import Form
from wtforms import StringField, SubmitField
from wtforms.validators import Required
from flask.ext.bootstrap import Bootstrap
# App and DB config
basedir = os.path.abspath(os.path.dirname(__file__))
app = Flask(__name__)
bootstrap = Bootstrap(app)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'data.sqlite')
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
db = SQLAlchemy(app)
# classes
class Role(db.Model):
__tablename__ = 'roles'
id = db.Column(db.Integer, primary_key = True) …Run Code Online (Sandbox Code Playgroud) 我在第57行看到了Flask-common的以下代码片段:
id = db.Column(UUID, default=lambda: str(uuid.uuid4()), primary_key=True)
Run Code Online (Sandbox Code Playgroud)
所以我想尝试一下并在我的应用中使用它models.py(因为我更喜欢uuid为id输入类型)
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from sqlalchemy.dialects.postgresql import UUID
import uuid
from app import db
class CostCenter(db.Model):
__tablename__ = "costcenter"
id = db.Column('id', UUID(as_uuid=True), default=lambda: str(uuid.uuid4()), primary_key=True)
name = db.Column('name', db.Text)
def __init__(self, name):
self.name = name
def __repr__(self):
return '<id {}>'.format(self.id)
Run Code Online (Sandbox Code Playgroud)
但是当我尝试运行时python manage.py db upgrade,会导致错误:
File "build/bdist.linux-x86_64/egg/sqlalchemy/sql/compiler.py", line 190, in __init__
File "build/bdist.linux-x86_64/egg/sqlalchemy/sql/compiler.py", line 213, in process
File "build/bdist.linux-x86_64/egg/sqlalchemy/sql/visitors.py", line …Run Code Online (Sandbox Code Playgroud) 这是我的第一个python应用程序,我一直在努力使迁移与flask和sqlalchemy正常工作.我终于得到了它的工作,但现在当我运行应用程序时,我在向使用迁移代码修改的表中添加对象时出现错误.这是在db.session.add(newTag)上抛出异常的视图
def put(self):
json_data = request.get_json(force=True)
foo = json_data['foo'] if 'foo' in json_data else ''
bar = json_data['bar'] if 'bar' in json_data else ''
baz = json_data['baz'] if 'baz' in json_data else ''
try:
boo = parse(json_data['boo'])
far = parse(json_data['far'])
except:
return jsonify(result='Invalid date')
faz = json_data['faz'] if 'faz' in json_data else ''
if faz == '':
return jsonify(result="faz is missing")
newTag = Tags(faz, baz, foo, bar, boo, far, True)
db.session.add(newTag)
db.session.commit()
return {'Success, tag' + str(newTag.id) + ' created'} …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用PostgreSQL的json列中的查询flask-sqlalchemy。这是我的代码
house_ = House()
results = house_.query.filter(
House.information['branch_name'].astext == 'release0'
).all()
Run Code Online (Sandbox Code Playgroud)
我不确定是怎么了。我尝试使用.cast(Unicode)而不是astext。
出现如下错误:
NotImplementedError: Operator 'getitem' is not supported on this expression
Run Code Online (Sandbox Code Playgroud) 有没有办法限制ModelView列的大小(长度/宽度)?我正在使用WYSIWYG编辑器,这会创建非常长的文本,因此使得ModelView的列非常长.
这是它的样子的图片.查看最后一列的右侧.它甚至比屏幕截图所能处理的还要长.
如何为烧瓶删除方法提供超链接.这是代码HTML代码.我用HTML编写了超链接.那么,如何在烧瓶路线中传递url.我正在使用Flask框架,我试图从数据库中删除一个条目.下面的代码给出了这个错误:"请求的URL不允许使用该方法."
{% extends "base.html" %}
{% block head %}
{{super()}}
{% endblock %}
{% block navbar %}
{{super()}}
{% endblock %}
{% block content %}
<div class="row">
<ol class="breadcrumb">
<li><a href="#">
<em class="fa fa-home"></em> </a></li>
<li class="active">Users>View/Edit</li>
</ol>
</div><!--/.row-->
<div class="row">
<div class="col-md-12">
<table class="table table-striped table-hover">
<thead>
<tr>
<th>
Name
</th>
<th>
Email
</th>
<th>
Address
</th>
<th>
Aadharimage
</th>
<th>
Password
</th>
<th>
Locations
</th>
<th>
Dateofsub
</th>
<th>
Lastlogin
</th>
<th>
Control
</th>
<th>
Delete
</th>
</tr> …Run Code Online (Sandbox Code Playgroud) flask-sqlalchemy ×10
flask ×9
python ×9
sqlalchemy ×4
postgresql ×2
flask-admin ×1
flask-login ×1
has-many ×1
html ×1
pip ×1
python-2.7 ×1
shell ×1
wtforms ×1