请注意,这是针对核心的,而不是针对 orm 的。
希望有人能帮助我解决这两个问题:
1)看起来很outerjoin简单join,但是如何进行内连接呢?
2)进行多重连接的语法是什么。我能够进行一次连接,但不确定多个连接的语法。
我的第一个连接看起来像这样:
select([...]).select_from(outerjoin(a, b))
Run Code Online (Sandbox Code Playgroud)
但此语法执行两个连接时会产生一些错误:
select([...]).select_from(outerjoin(a, b).select_from(outerjoin(ma, tr))
Run Code Online (Sandbox Code Playgroud)
提前致谢。
我正在使用 sqlalchemy 的分页对我的查询进行分页,如下所示,但在我的首页中,我想实现下一个按钮(或数字页面导航链接,如 1,2,3,4..),当它到达最后一页时我不想向用户显示下一个按钮(或知道页面导航中可用的最大页面数)。我不想在 sqlalchemy 中使用另一个数据库查询。实现这一目标最方便的方法是什么?
我正在使用以下分页:
Blog.query.filter(Blog.title.like("%"+query+"%")).paginate(page=start,per_page=size).items
Run Code Online (Sandbox Code Playgroud)
一种方法可能是检查它是否返回与我大小相同的项目的确切数量,或者不是我现在正在做的事情,如果不是,它就是最后一个,但它不满足所有计数和大小的余数为零的极端情况。
我有一个 HTML 表,它显示数据库表中的一些数据。数据是通过使用循环显示的。每行都有一个按钮,也是通过循环生成的。我正在使用该按钮连续编辑数据。单击按钮时,会弹出一个模态框,其中包含要编辑的数据。问题是它仅选择行中的第一个 ID(即仅选择第一行)。即使当我单击第二行按钮时,模式中字段中显示的信息也适用于第一行。请指导我如何处理此问题?我怎样才能解决这个问题 ?注意:我使用烧瓶
这是我的代码:
<div>
<table class="table" id="users">
<thead>
<tr class="success">
<th>#</th>
<th>Staff ID</th>
<th>Role</th>
<th>Designation</th>
<th>Phone</th>
<th>Email</th>
<th>Department</th>
<th>Edit</th>
</tr>
</thead>
<tbody>
{% for user in users %}
<tr>
<td>{{ user.id }}</td>
<td>{{ user.staffid }}</td>
<td>{{ user.role }}</td>
<td>{{ user.designation }}</td>
<td>{{ user.phone }}</td>
<td> {{ user.email }} </td>
<td> {{ user.dept }} </td>
<td><a href="#" data-toggle="modal" data-target='#edit' class="btn btn-success"><i class="fa fa-edit"></i> EDIT </a></td>
</tr>
<div class="modal fade" id="edit" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content"> …Run Code Online (Sandbox Code Playgroud)例外是AttributeError: 'StringField' object has no attribute 'wrap_formdata',它似乎只发生在我从 Flask-Admin 仪表板创建或编辑以下两个模型中的任何一个时:
class Experiment(db.Model):
id = db.Column(db.Integer, primary_key=True)
property_id = db.Column(db.Integer,
db.ForeignKey('property.id'),
index=True,
nullable=False)
name = db.Column(db.String, nullable=False)
start_date = db.Column(db.DateTime, nullable=True)
end_date = db.Column(db.DateTime, nullable=True)
status = db.Column(db.String, nullable=False, default='Draft')
title = db.Column(db.String)
meta = db.Column(db.String)
seed_uri = db.Column(db.String)
targets = db.Column(postgresql.JSON)
variations_json = db.Column(postgresql.JSON)
variations = db.relationship('ExperimentVariation',
backref='experiment',
cascade='save-update, merge, delete')
def __repr__(self):
repr_fmt = '<Experiment {id}, {property_id} {name}>'
return repr_fmt.format(id=self.id,
property_id=self.property_id,
name=self.name)
class ExperimentVariation(db.Model):
id = db.Column(db.Integer, primary_key=True) …Run Code Online (Sandbox Code Playgroud) sqlalchemy wtforms flask-sqlalchemy flask-wtforms flask-admin
我正在尝试向 SQLAlchemy 中现有的数据库添加一个表。我的 app.db 已经编译并填充了数据。我只是想向名为song_points 的数据库添加一个新表。(数据库随着时间的推移跟踪歌曲)
我的模型:
from app import db
class songs (db.Model):
SongID = db.Column(db.Integer,primary_key=True, autoincrement=False)
Artist = db.Column(db.String(120), primary_key=True)
Title = db.Column(db.String(120), primary_key = True)
def __repr__(self):
return "%s, %s, %d\n" %(self.Artist, self.Title, self.SongID)
class points(db.Model):
SongID = db.Column(db.Integer, db.ForeignKey("songs.SongID"), nullable= False, primary_key=True)
Genre = db.Column(db.String(25), primary_key=True)
Points = db.Column(db.Integer)
Date = db.Column(db.Date, primary_key=True)
Rank = db.Column(db.Integer)
def __repr__self(self):
return "%d, %s, %d\n" %(self.SongID, self.Genre, self.Points)
class artist_points(db.Model):
Artist = db.Column(db.String(120), primary_key=True)
Points = db.Column(db.Integer)
def __repr__self(self): …Run Code Online (Sandbox Code Playgroud) 所以我正在尝试使用数据库和烧瓶动态构建站点。该网站现在以我希望的方式工作,但只持续了大约一分钟,然后我收到一条错误消息:
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query')
Run Code Online (Sandbox Code Playgroud)
数据库包含我想为每一页抓取的 4 个条目,以及一个主页,我只从数据库中的每个条目抓取 2 个条目。沿着这条线的某个地方,它遇到了一个错误,它无法再访问数据库,因此不允许加载更多使用数据库的页面。
谁能帮我弄清楚为什么会发生这种情况?我对烧瓶和 sqlalchemy 很陌生
下面是我的代码:
from flask import Flask
from flask import render_template
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://databaseaddress'
db = SQLAlchemy(app)
class Kitchen(db.Model):
__tablename__ = 'kitchens'
id = db.Column('id', db.Integer, primary_key=True)
description = db.Column('description')
galleryId = db.Column('galleryId')
cpo = db.Column('cpo')
def __init__(self, description, galleryId, cpo):
self.description = description
self.galleryId = galleryId
self.cpo = cpo
def __repr__(self):
return '<Gallery %r>' …Run Code Online (Sandbox Code Playgroud) 我正在尝试连接两个 docker 容器,一个是 posgresql,另一个是 python Flask 应用程序。两者都正确链接,python 应用程序中的所有连接变量都直接取自 postgres 容器中通过链接公开的变量,并且与检查 postgresql 容器时发现的变量相同。当我将 psql 与连接字符串中的确切参数一起使用时,即:
psql -p 5432 -h 172.17.0.2 -d mydb -U user
Run Code Online (Sandbox Code Playgroud)
连接到 postgres 容器中的数据库是成功的,所以我知道 postgres 正在通过指定的端口等正确通信。但是,当我尝试通过具有相同连接变量的烧瓶连接到数据库时,我收到此错误:
回溯(最近一次调用):文件“/usr/local/lib/python3.6/site-packages/sqlalchemy/pool.py”,第 1122 行,在 _do_get 中 return self._pool.get(wait, self._timeout)文件“/usr/local/lib/python3.6/site-packages/sqlalchemy/util/queue.py”,第 145 行,在 get raise Empty sqlalchemy.util.queue.Empty
在处理上述异常的过程中,又发生了一个异常:
回溯(最近一次调用):文件“/usr/local/lib/python3.6/site-packages/sqlalchemy/engine/base.py”,第 2138 行,在 _wrap_pool_connect return fn() 文件“/usr/local/ lib/python3.6/site-packages/sqlalchemy/pool.py", line 328, in unique_connection return _ConnectionFairy._checkout(self) File "/usr/local/lib/python3.6/site-packages/sqlalchemy/pool.py" py”,第 766 行,在 _checkout 仙女 = _ConnectionRecord.checkout(pool) 文件“/usr/local/lib/python3.6/site-packages/sqlalchemy/pool.py”,第 516 行,在 checkout rec = pool._do_get () 文件“/usr/local/lib/python3.6/site-packages/sqlalchemy/pool.py”,第 1138 行,在 _do_get self._dec_overflow() 文件“/usr/local/lib/python3.6/site …
这是我的模型:
class Entry(db.Model):
id = db.Column(db.Integer, primary_key=True)
manifest = db.Column(db.String, default=None, nullable=True)
name = db.Column(db.String, default=None, nullable=True)
actions = db.relationship('Action', backref='entry', lazy='dynamic')
class Action(db.Model):
id = db.Column(db.Integer, primary_key=True)
action_date = db.Column(db.DateTime, default=datetime.utcnow, nullable=True)
location = db.Column(db.String, default=None, nullable=True)
entry_id = db.Column(db.Integer, db.ForeignKey('entry.id'))
Run Code Online (Sandbox Code Playgroud)
routes.py:
@app.route('/manifests/<manifest_to_view>')
@login_required
def view_manifest(manifest_to_view):
page = request.args.get('page', 1, type=int)
entries = Entry.query.filter_by(manifest=manifest_to_view).paginate(
page, app.config['POSTS_PER_PAGE'], False)
next_url = url_for('view_manifest', manifest_to_view=manifest_to_view, page=entries.next_num) \
if entries.has_next else None
prev_url = url_for('view_manifest', manifest_to_view=manifest_to_view, page=entries.prev_num) \
if entries.has_prev else None
return …Run Code Online (Sandbox Code Playgroud) 应用程序昨天在家中在不同的系统上运行良好**当我尝试在不同的系统上运行它时(**新安装的所有东西) -所以我认为这个错误仅适用于最新版本。
目标是将会话中的用户连接到第二个数据库
我收到这个错误:
create_engine() missing 1 required positional argument: 'engine_opts'
我目前的代码:
app.config['SQLALCHEMY_DATABASE_URI'] = "postgres:// ****" #main database
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = "True"
app.config['SQLALCHEMY_ENGINE_OPTIONS'] = "None" #i didnt have that line in my system
before i've just added it in attempt of fixing this issue
db = SQLAlchemy(app,session_options={"autoflush": False})
@app.route('/test')
def test():
x = 'postgres://*****' #secondary database for user in session only.
engine = db.create_engine(x)
return ''
Run Code Online (Sandbox Code Playgroud)
我尝试过的事情:
检查库页面: flask_SQLAlchemy Library
我发现的一切是这样的:
create_engine ( sa_url, engine_opts ) …
我正在使用flask-restful 这是我要插入的课程
class OrderHistoryResource(Resource):
model = OrderHistoryModel
schema = OrderHistorySchema
order = OrderModel
product = ProductModel
def post(self):
value = req.get_json()
data = cls.schema(many=True).load(value)
data.insert()
Run Code Online (Sandbox Code Playgroud)
在我的模型中
def insert(self):
db.session.add(self)
db.session.commit()
Run Code Online (Sandbox Code Playgroud)
模式
from config.ma import ma
from model.orderhistory import OrderHistoryModel
class OrderHistorySchema(ma.ModelSchema):
class Meta:
model = OrderHistoryModel
include_fk = True
Run Code Online (Sandbox Code Playgroud)
我要插入的示例数据
[
{
"quantity":99,
"flaskSaleStatus":true,
"orderId":"ORDER_64a79028d1704406b6bb83b84ad8c02a_1568776516",
"proId":"PROD_9_1568779885_64a79028d1704406b6bb83b84ad8c02a"
},
{
"quantity":89,
"flaskSaleStatus":true,
"orderId":"ORDER_64a79028d1704406b6bb83b84ad8c02a_1568776516",
"proId":"PROD_9_1568779885_64a79028d1704406b6bb83b84ad8c02a"
}
]
Run Code Online (Sandbox Code Playgroud)
这是我在插入方法开始后得到的
TypeError: insert() takes exactly 2 arguments (0 given)
Run Code Online (Sandbox Code Playgroud)
或者有另一种方法来做这个动作?
flask-sqlalchemy ×10
python ×9
flask ×7
sqlalchemy ×5
docker ×1
flask-admin ×1
mysql ×1
postgresql ×1
psycopg2 ×1
python-3.x ×1
sql ×1
wtforms ×1