小编Eri*_*aal的帖子

在烧瓶和其他应用程序之间共享sqlalchemy模型

我有一个正在运行的Flask应用程序,它是根据我们在网上和Miguel Grinberg的"Flask Web Development"一书中找到的最佳实践组合而建立的.

我们现在需要第二个Python应用程序,它不是Web应用程序,需要访问与Flask应用程序相同的模型.我们想重复使用相同的模型,因此两个应用程序都可以从共享代码中受益.

我们已经删除了对flask-sqlalchemy扩展(我们之前使用过Flask应用程序时)的依赖关系.并将其替换为此处描述SQLalchemy Declarative扩展,这有点简单(Flask-SQLalchemy为标准SQLAlchemy添加了一些特定的东西)

根据示例,我们在根目录中创建了一个database.py文件.在我们的例子中,有两个与Declarative扩展示例不同的东西:我将引擎和会话放在一个类中,因为我们所有的模型都使用db.session而不是db_session,并且我将带有配置值的字典传递给init( ),以便我可以使用不同的配置从Flask和其他应用程序重新使用此database.py.它看起来像这样:

from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base


class Database(object):

    def __init__(self, cfg):
        self.engine = create_engine(cfg['SQLALCHEMY_DATABASE_URI'], convert_unicode=True)
        self.session = scoped_session(sessionmaker(autocommit=False, autoflush=False, bind=self.engine))

    class Model(object):
        pass

Base = declarative_base()
Run Code Online (Sandbox Code Playgroud)

所以现在我们来解决实际问题.Flask创建一个包含配置选项的类字典对象,并将它们作为属性添加到app-instance.它从实例文件夹,站点根目录中的config.py和环境变量加载它们.我需要从Flask传递配置字典,所以我需要Flask来FIRST加载和组装配置,然后初始化数据库,并在app文件的根目录中有一个(配置的)db对象.但是,我们遵循应用工厂模式,因此我们可以针对不同情况(测试,生产,开发)使用不同的配置.

这意味着我们app/__init__.py看起来像这样(简化):

from flask import Flask
from database import Database
from flask.ext.mail import Mail
from flask_bcrypt import Bcrypt
from config import config …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask flask-sqlalchemy

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

现在Celery 4已经放弃了Windows支持,Windows上(Python 3)任务队列的最佳选择是什么?

我们在Windows下的IIS下运行Flask站点,对于进程外任务,我们使用Celery.Celery在Windows下给了我们一些问题,但是现在我们很满意运行版本3.1.12,使用RabbitMQ/AMQP作为后端,它可以在Windows下运行.

新版Celery(4)已经放弃了对Windows的支持,所以我正在寻找一种可行的替代方案.

RQ似乎是一个非常好的任务队列,但它也不支持Windows(页面底部)

我已经看到了一些看起来不太受欢迎的任务队列,例如:

但目前还不清楚这些是否支持Windows和Flask.我想知道是否有人有经验在Windows下运行Python任务队列的经验.也许我提到的那个之一,或者另类.

我们不能选择运行Linux机器,因为我们没有管理Linux的经验,而且我们有许多需要Windows运行的遗留内容.

python queue celery flask python-huey

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

如何在flask-sqlalchemy中使用反射/自动加载

我在一个简单的测试应用程序中尝试使用flask-sqlalchemy.我正在运行SQL服务器,我可以从Flask使用SQLalchemy连接到这样:

from flask import render_template
from app import app, db

@app.route('/')
@app.route('/index')
def index():

    people = list(db.session.execute("select top 10 * from people where ppl_username IS NOT NULL"))
Run Code Online (Sandbox Code Playgroud)

但是,我还想使用SQL伪造语言和SQLalchemy的ORM部分进行查询.因为这是一个现有的数据库,我不想编写自己的类并生成数据库,我想反映现有的数据库并以这种方式访问​​它.我在API文档中找到了reflect方法,但我无法弄清楚如何(以及在​​何处)使用它.

除了想知道如何做到这一点; 我也想知道:

  • 数据库反射是在每个请求上发生还是仅在应用程序启动时发生?(这是一个很大的数据库,因此每次请求都会显示停止)
  • 是否可以从数据库生成类的代码并保存以供以后使用,像Django的inspectDB()那样?

谢谢,

python sqlalchemy flask flask-sqlalchemy

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

需要澄清使用Django 1.4 Form Wizards,特别是预填充和保存

我们正在使用Django 1.4的新表单向导功能构建向导.
关于此的文档非常简洁,我们找不到任何高级示例.我们正在使用一个命名步骤向导(需要支持我们使用的listview/datagrid)和一个会话后端.该向导用于编辑角色和链接权限,旨在提供添加和编辑功能.我们通过在第一步询问用户是否要添加或编辑来执行此操作.

下一步取决于该选择; 如果用户想要编辑,则会有一个搜索屏幕,后面是一个显示结果的listview/datagrid.然后,用户可以选择其中一个结果并转到详细信息屏幕,然后是FilteredSelectMultiple页面,允许他/她将权限链接到此角色.

如果用户想要添加新角色,则跳过搜索和结果屏幕,用户直接进入详细信息屏幕,然后是链接屏幕.
这一切都运行得很好,在urls.py中使用了condition_dict,但是我们想知道关于一般功能的一些事情:

选择特定的预先存在的角色后,如何使用相应的数据填充详细信息和链接屏幕?

我们是否实例化一个角色对象并以某种方式将它传递给两个表单,如果是这样,我们在哪里实例化它,我们是否需要分别对每个表单执行此操作(这看起来有点过头了)?

保存时,通常的做法是创建角色对象的另一个实例,将表单数据添加到它并保存,或者我们可以以某种方式重新使用表单中使用的对象吗?

我们已经尝试重载get_form_instance以返回角色的实例,我们已经在文档中查看了instance_dict,但感觉这是错误的方法,并且没有在网上找到的例子,我们甚至不确定这些是用于预先 - 填写数据或即使我们走在正确的轨道上.

从逻辑上讲,我会在选择现有角色的步骤中说,我需要使用所选对象的实例来填充向导变量,这些将显示在表单中.在向导结束时,我们反转该过程并从向导变量中获取所有数据,并将它们添加到新实例化的角色对象中并保存.理想情况下,如果需要执行INSERT或UPDATE,此实例将自行确定,具体取决于是否填充了前缀键.

如果任何人都可以提供一个例子,或者在正确的方向上轻推,那将非常感激.

views.py中wizardview类的代码如下:

class RolesWizard(NamedUrlSessionWizardView):

def get_template_names(self):
    # get template for each step...
    if self.steps.current == 'choice':
        return 'clubassistant/wizard_neworeditrole.html'
    if self.steps.current == 'search':
        return 'clubassistant/wizard_searchrole.html'
    if self.steps.current == 'results':
        return 'clubassistant/wizard_pickrole.html'
    if self.steps.current == 'details':
        return 'clubassistant/wizard_detailsrole.html'
    elif self.steps.current == 'rights':
        return 'clubassistant/wizard_roles.html'

def get_context_data(self, form, **kwargs):
    # get context data to be passed to the respective …
Run Code Online (Sandbox Code Playgroud)

django django-forms django-formwizard

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

使用sqlalchemy中的计算列更新表

我正在使用SQLalchemy在旧式MSSQL数据库中进行工作,对此我有一个声明式映射。
该数据库有几个具有计算列的表。我可以很好地阅读它们,但是(当然)写入计算列是行不通的。但是,当我创建并尝试保存ORM对象时,SQLAlchemy仍然尝试在这些列中保存“无”值,从而导致错误。

我在网上找到了一些示例,这些示例应使用SQLAlchemy的hybrid_property装饰器将特定列设置为“只读”,但是即使实现了该示例,The column "tlog_real_timehh" cannot be modified because it is either a computed column or is the result of a UNION operator.仍然会出现相同的错误()。

代码如下-映射:

class transactionlog(Base):
    __tablename__ = 'transactionlog'
    tlog_id = Column(VARCHAR(length=36), primary_key=True, nullable=False)
    tlog_ppl_id = Column(VARCHAR(length=36), ForeignKey('people.ppl_id'))
    tlog_evtt_id = Column(VARCHAR(length=5))
    tlog_testrun = Column(BIT())
    tlog_Data = Column(NVARCHAR(length=300))
    tlog_price = Column(DECIMAL(precision=18, scale=2))
    tlog_comment = Column(NVARCHAR(length=1000))
    _tlog_real_timehh = Column('tlog_real_timehh', INTEGER())
    _tlog_real_timemm = Column('tlog_real_timemm', INTEGER())
    _tlog_real_timess = Column('tlog_real_timess', INTEGER())
    _tlog_fin_booking = Column('tlog_fin_booking', BIT())

    @hybrid_property
    def tlog_real_timehh(self):
        return self._tlog_real_timehh

    @tlog_real_timehh.setter …
Run Code Online (Sandbox Code Playgroud)

python orm sqlalchemy

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

如何为我的asp.net MVC网站的每个访问者添加一个cookie?

我正在尝试使用razor作为视图引擎的ASP.NET MVC 3站点.我需要为我网站的每个访问者分配一个cookie.这样做的最佳地点/方式是什么?请详细说明,因为我是ASP.NET的新手.

c# asp.net-mvc asp.net-mvc-3

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

RabbitMQ 排队消息不断增加

我们有一个基于 Windows 的 Celery/RabbitMQ 服务器,它为我们的 Web 应用程序在进程外执行长时间运行的 Python 任务。
例如,它的作用是获取一个 CSV 文件并处理每一行。对于每一行,它都会在我们的数据库中登记一个或多个记录。

这似乎工作正常,我可以看到工作进程正在预订的记录。但是,当我使用管理插件(基于 Web 的管理工具)检查rabbitMQ 服务器时,我看到排队的消息在增加,并且没有回落。 排队消息图表

在连接下,我看到 116 个连接,每个虚拟主机大约 10-15 个,全部“正在运行”,但是当我点击时,它们中的大多数都将“空闲”作为状态。我也想知道为什么这些连接仍然打开,如果有什么我需要改变以使它们自己关闭: 在此处输入图片说明

在“队列”下,我可以看到 6200 多个状态为“空闲”且没有减少的项目。

所以具体来说,我在问这些是否是正常的统计数据,或者我是否应该担心队列增加但不会回落以及似乎没有关闭的持久连接......

除了管理工具中相当简洁的帮​​助之外,我似乎找不到任何关于这些统计数据的含义以及它们是好是坏的信息。

我还想知道为什么消息在队列中仍然可见,以及为什么它们没有被删除,因为任务似乎没有完成。

任何帮助表示赞赏。

python rabbitmq celery

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

让 svelte-material-ui 与 Snowpack 和 sass 一起使用

我正在尝试使用 Snowpack 获得 svelte 材质 UI。\n我已经安装了 Snowpack 和 Snowpacks svelte 模板,如下所示:

\n\n
npm install --save-dev snowpack@next\nnpx create-snowpack-app xpapp --template @snowpack/app-template-svelte\n
Run Code Online (Sandbox Code Playgroud)\n\n

这有效,示例页面显示出来。接下来,我按照 Svelte Material UI 说明“将其捆绑在您自己的代码中”,如此处说明中的“使用”章节所引用:https ://github.com/hperrin/svelte-material-ui#usage

\n\n

所以我安装了 Sass 并在我的snowpack.config.json如下所示:

\n\n
{\n  "extends": "@snowpack/app-scripts-svelte",\n  "scripts": { \n    "build:scss": "sass"\n  },\n  "devOptions": {},\n  "installOptions": {}\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我按照此处的(非常简洁的)说明进行操作: https: //www.snowpack.dev/#sass

\n\n

我还src/theme/_smui-theme.scss按照说明在源文件中添加了一个空文件,并且安装了 nessecary @smui 组件。

\n\n

问题是我当前在启动 Snowpack 开发服务器时遇到此错误:

\n\n
> snowpack dev\n\nSnowpack Dev Server (Beta)\nNOTE: Still experimental, default behavior may change.\nStarting up...\n\n\xe2\xa0\x99 snowpack installing... @smui/icon-button, …
Run Code Online (Sandbox Code Playgroud)

sass rollupjs snowpack

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

使用Pylons和SQLalchemy在sqlite中存储UUID

我正在使用SQLalchemy和sqlite开发我的第一个Pylons项目.我想使用UUID作为我的一个表的主键.我在下面找到了问题,并使用代码向SQLalchemy添加自定义UUID()类型.(第二个解决方案,我无法弄清楚如何使用zzzeek的建议.)

sqlalchemy(塔)中的随机ID

但是,当我尝试它时,我得到ValueError('字节不是16个字符串')我怀疑这与我试图将这个UUID存储在sqlite VARCHAR类型字段中这一事实有关.有谁知道我应该在sqlite中使用哪种类型的字段,这些字段适用于来自SQLalchemy的这些UUID?

谢谢,Erik

python sqlite pylons sqlalchemy

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

是否可以更改聚合物中默认的双花括号分隔符?

我想在 Python/Flask 项目中使用聚合物。Flask 使用 Jinja2 模板引擎,它也使用双花括号 {{}} 作为分隔符。

在 Jinja2 中转义大括号是可能的,但它会导致我想避免的非常丑陋和不可读的代码。

尽管在 Jinja2 中也可以更改分隔符,但我更愿意在 Polymer 中更改它们,因为我们已经在项目中使用了一些 Jinja2 模板。

所以问题是,是否可以更改 Polymer 中的分隔符,如果可以,我们该怎么做?

谢谢

javascript polymer polymer-1.0

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