我目前正在开发一个使用Flask,WTForms,SQLAlchemy和相应的Flask扩展的应用程序来将它们粘合在一起.我正考虑将来搬到Go,因为原因.Go中是否有任何库允许我将Web表单映射到模型并以与WTForms相同的方式进行参数化验证?
尝试在类Note和Document之间创建关联关系.我面临的问题是,只有当我使用关联表对象而不是表名时,我的辅助关系才有效.我的意思是这种关系:
notes = relationship(u'Note', secondary=t_Documented, backref='documents')
Run Code Online (Sandbox Code Playgroud)
有效,但以下不起作用:
notes = relationship(u'Note', secondary='Documented', backref='documents')
Run Code Online (Sandbox Code Playgroud)
查询时,我收到错误:
sqlalchemy.exc.InvalidRequestError:初始化映射器Mapper | Document | Document时,表达式'Documented'无法找到名称("name'Documented'未定义").如果这是类名,请考虑在定义了两个依赖类之后将此关系()添加到类中.
我宁愿使用该名称,因为我的模型是使用sqlacodegen生成的.
此外,SQLAlchemy文档说我可以使用名称(http://docs.sqlalchemy.org/en/rel_0_9/orm/relationships.html#many-to-many)和"使用声明性扩展名".我用谷歌搜索了导致我这一点的术语.问题是在我的情况下我可以如何扩充基地.
# model.py
# coding: utf-8
from sqlalchemy import Column, Date, DateTime, ForeignKey, ForeignKeyConstraint, Index, Integer, Numeric, String, Table, Text, text
from sqlalchemy.orm import backref, relationship
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
metadata = Base.metadata
t_Documented = Table(
'Documented', metadata,
Column('id', Integer, primary_key=True),
Column('note_id', ForeignKey(u'MySchema.Note.id'), nullable=False),
Column('document_id', ForeignKey(u'MySchema.Document.id'), nullable=False, index=True),
Column('inserted', DateTime, nullable=False, server_default=text("'0000-00-00 00:00:00'")),
Column('updated', …Run Code Online (Sandbox Code Playgroud) 你如何更新多个值?
predictions=Fixture_prediction.query\
.filter_by(user_id=user_id)\
.update(request.form['home_score'],request.form['away_score'])
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
ArgumentError: Valid strategies for session synchronization are False, 'evaluate' and 'fetch'
Run Code Online (Sandbox Code Playgroud) 我是金字塔的全新.我正在尝试开发一个将使用金字塔angd postgresql的应用程序,但我完全困惑如何在sripts目录中配置initializedb.py文件,尤其是初始化数据库.
我正在使用PostgreSQL 9.1.
我正在尝试将数据框的内容写入除"公共"模式之外的模式中的表.我按照Pandas中描述的模式将数据帧写入其他postgresql模式:
meta = sqlalchemy.MetaData()
engine = create_engine('postgresql://some:user@host/db')
meta = sqlalchemy.MetaData(engine, schema='schema')
meta.reflect(engine, schema='schema')
pdsql = pandas.io.sql.PandasSQLAlchemy(engine, meta=meta)
Run Code Online (Sandbox Code Playgroud)
但是当我试着写到桌子上时:
pdsql.to_sql(df, 'table', if_exists='append')
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
InvalidRequestError: Table 'schema.table' is already defined for this MetaData instance. Specify 'extend_existing=True' to redefine options and columns on an existing Table object.
Run Code Online (Sandbox Code Playgroud)
我也尝试添加extend_existing=True到reflect通话中,但这似乎没有什么区别.
如何让pandas写入此表?
我有一个高级搜索界面,它将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个标签?
我在构造生成以下原始SQL查询所需的SQLAlchemy代码时遇到问题。
WITH RECURSIVE recruiters AS (
SELECT
recruiter.id
FROM
recruiter
JOIN
recruiter_member ON recruiter.id = recruiter_member.recruiter_id
WHERE
recruiter_member.user_id = 'f12c617a-415c-4f8c-add0-81a597545be8'
UNION ALL
SELECT
children.id
FROM
recrutiers AS parents,
recruiter AS children
WHERE
children.recruiter_id = parents.id
)
SELECT
*
FROM
recruiters
Run Code Online (Sandbox Code Playgroud)
这里的模型是Recruiter和RecruiterMember。我只是似乎没办法UNION正确。
您好我在flask-sqlalchemy加入了一个问题.我是数据库和烧瓶的初学者.
这些是我的课程:
class Shopping(db.Model):
__tablename__ = 'shoppings'
id = db.Column(db.Integer, primary_key=True)
product_name = db.Column(db.String(30), index=True, unique=False)
price=db.Column(db.Float(10), index=True)
date=db.Column(db.Date())
s_type_id = db.Column(db.Integer, db.ForeignKey('shopping_types.id'))
def __repr__(self):
return 'Alisveris yeri :{0} Tutar :{1} Tarih: {2}'.format(self.product_name,self.price,self.date)
def __list__(self):
return [self.product_name,self.price,self.date]
class Shopping_Type(db.Model):
__tablename__='shopping_types'
id=db.Column(db.Integer,primary_key=True)
type_name=db.Column(db.String(30), index=True, unique=True)
types = db.relationship('Shopping', backref = 'shopping_types', lazy = 'dynamic')
def __repr__(self):
return '{0}'.format(self.type_name)
Run Code Online (Sandbox Code Playgroud)
当我尝试python终端并运行:
select shoppings.product_name ,shoppings.price, shoppings.date, shopping_types.type_name from shoppings join shopping_types ON shoppings.s_type_id=shopping_types.id
Run Code Online (Sandbox Code Playgroud)
询问
我得到了我想要的但是当我运行flask-sqlalchemy命令时:
rslt=db.session.query(spng).join(st)
spng:Shopping(class)
st:Shopping_Type(class)
Run Code Online (Sandbox Code Playgroud)
我只获得购物数据.我想购买Shopping + Shopping_Type数据.
谢谢.
我创建了一个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) 我试图查询和过滤一对多的关系,似乎无法弄清楚如何做到这一点.
这是我的映射(为简洁而修剪):
class Bug(Base):
__tablename__ = 'bug'
id = Column('bug_id', Integer, primary_key=True)
tags = relationship('Tag', backref='bug')
class Tag(Base):
id = Column('tag_id', Integer, primary_key=True)
name = Column('tag_name', String)
bug_id = Column('bug_id', ForeignKey('bug.bug_id'))
Run Code Online (Sandbox Code Playgroud)
我希望能够找到所有没有名称为"foo"的标记的错误.