我主要使用Python 2.7和Django 1.3.3(在Heroku上托管)工作,我有多个项目,我维护.我一直在使用Ubuntu在VirtualBox内部运行的桌面上工作,但最近不得不去旅行并想把所有东西都装在我的笔记本上.但是,我很快发现,virtualenv + Github很容易创建项目,但我努力尝试将它们移到我的笔记本上.我想出的方法是创建新的virtualenv,然后从github克隆代码.但是,我不能在我真正想要的文件夹中这样做,因为它会说文件夹不是空的.所以,我会将它克隆到一个tmp文件夹,而不是将它们剪切/粘贴到我真正想要的地方.不是可怕的,但我觉得我在这里遗漏了一些东西,而且应该更容易.也许首先克隆,然后mkvirtualenv?
这不是一个令人沮丧的问题,但我正在考虑做出一些更改(比如乘坐VirtualBox并使用双启动系统),如果我能让它变得更加平滑,那将会很棒.:)
最后,我发现并阅读了一些关于在计算机之间移动git repos的帖子,但我没有看到任何与Virtualenv的交易(也许我只是错过了它).
编辑:为了清楚并避免混淆,我不是试图"移动"virtualenv.我只是在谈论创建一个新方法的最佳方式.安装包,然后从github克隆repo.
我之前使用过Django(版本1.2)并且通常我喜欢它...它特别擅长快速启动并运行全新的项目.但是,在这种情况下,我正在重写和现有系统并将其移动到Python/Django.所以,我已经拥有一个MySQL数据库,里面有一个"users"表...这个表存储了用户密码和MySQL SHA1函数(没有盐等).
作为迁移的一部分,我将修复一些数据建模缺陷并将其移植到PostgreSQL.
我真的很想使用django.contrib.auth,但我不清楚我需要做什么.我已经阅读了文档,并且知道我可以将所需的用户信息和我所拥有的"额外"信息分开并将其放入UserProfile中.
但是,如何处理存储在MySQL数据库中的密码?
以前有人处理过吗?你采取了什么方法?
我刚刚在Ubuntu 10.04上安装了第一个PostgreSQL 9.1.
注意:我在Windows上使用安装程序完成了几次没有问题.
经过一番努力,我把它设置为通过pgAdminIII远程连接.但是,连接到数据库之后我真的很惊讶,我收到了关于编码的警告."postgres"数据库本身是使用"SQL_ASCII"编码创建的.每次我在Windows上安装时,它都会创建带有"UTF8"的postgres数据库 - 这似乎会好很多,并且会在通过pgAdminIII打开数据库时停止警告消息.
有什么我做错了吗?是否有用于设置要使用的默认编码的安装选项/参数?
无论如何要解决这个问题吗?我已经在网上看到了一些内容,说你需要愚蠢并恢复以更改数据库的编码,但我不确定甚至可以在postgres db上实现.是吗?
谢谢你的帮助!
我有以下场景:
在我的models.py中
class FooBar(models.Model):
description = models.CharField(max_length=20)
Run Code Online (Sandbox Code Playgroud)
在我的utils.py文件中.
from models import FooBar
def save_foobar(value):
'''acts like a helper method that does a bunch of stuff, but creates a
FooBar object and saves it'''
f = FooBar(description=value)
f.save()
Run Code Online (Sandbox Code Playgroud)
在tests.py中
from utils import save_foobar
@patch('utils.FooBar')
def test_save_foobar(self, mock_foobar_class):
save_mock = Mock(return_value=None)
mock_foobar_class.save = save_mock
save_foobar('some value')
#make sure class was created
self.assertEqual(mock_foobar_class.call_count, 1) #this passes!!!
#now make sure save was called once
self.assertEqual(save_mock.call_count, 1) #this fails with 0 != 1 !!!
Run Code Online (Sandbox Code Playgroud)
这是我正在尝试做的简化版本...所以请不要为什么我有一个utils文件和一个帮助函数(在现实生活中它做了几件事).此外,请注意,虽然简化,这是我的问题的实际工作示例.第一次调用call_count会返回1并传递.但是,第二个返回0.因此,看起来我的补丁正在工作并被调用. …
我正在使用Django REST Framework来处理我正在使用的API.出于几个原因,我想使用基于类的视图.但是,我对我的单元测试有点特别,我从不允许单元测试接触数据库.注意:我总是使用Carl Meyer在Pycon 2012上演示的"技巧",在那里他模拟了Cursor包装器.
cursor_wrapper = Mock()
cursor_wrapper.side_effect = RuntimeError("No touching the database!")
@patch('django.db.backends.util.CursorWrapper', cursor_wrapper)
class TestMyCode(TestCase):
Run Code Online (Sandbox Code Playgroud)
这里是链接如果你有兴趣的幻灯片.
我在其中一个视图中有一个方法来检查数据库中的某些内容.要干,它在POST和PUT之间共享.但是,我在为我的单元测试嘲笑它时遇到了问题.那是因为classmethod as_view创建了一个新的实例和类调度,并返回dispatch返回的"handler"函数.所以,我似乎无法在基于类的视图中获取共享方法来模拟它.
我可以模拟基于类的视图使用的模型,但是我必须基本上打破我的"DRY"目标,并在POST和PUT中复制代码.我想我可以重构代码并将逻辑移到模型上.但是,我并不积极,我想这样做.
如何模拟基于类的视图的共享方法以避免实际触及数据库?只是避免它们?
我想在表上添加字段级验证.有一个名为"account_number"的字段,该字段应始终通过"luhn"检查.我发现了一个名为"luhn_verify"的功能似乎正常工作(谷歌如果你感兴趣的话).它返回一个布尔值.我的问题是:
在PostgreSQL中使用触发器进行此验证与检查约束是否有任何主要的性能优势.
附加信息:
免责声明:
我觉得这可能已经得到了解答,但我似乎找不到明确的答案.如果是,请标记为重复并参考原始问题/答案.
可能是dba板的更好问题.
postgresql triggers database-design check-constraints postgresql-9.1
我是Flask和SQLAlchemy的新手(过去3年一直与Django合作).我需要调用一个现有的 PostgreSQL函数来写入数据库中的3个不同的表.这是我无法控制的(我只需要让它工作).该函数返回一条记录(自定义Postgres类型),其中包含有关结果的信息.这是代码:
from flask.ext.sqlalchemy import SQLAlchemy
db = SQLAlchemy()
...
retval = db.engine.execute(
'SELECT * FROM add_purchase(%s, %s, %s, %s, %s, %s, %s);',
clean_data.account_id, amount, tax, deposit, clean_data.pos_id,
g.token_id, clean_data.external_reference_id).first()
app.logger.info(retval) # for debugging
db.session.commit()
Run Code Online (Sandbox Code Playgroud)
上面的代码运行没有错误.从日志消息中,我可以看到从数据库返回正确的数据.但是,如果我去psql,我看不到新插入的数据.似乎事务从未真正提交过.
我能找到的大多数文档和示例都基于使用SQLAlchemy的ORM.我在这做错了什么?
堆栈信息:
Flask==0.10.1
Flask-SQLAlchemy==1.0
psycopg2==2.5.2
Python 2.7.3
Postgresql 9.3
Run Code Online (Sandbox Code Playgroud)
更新
我找到了一种方法使它工作,这是一个实际上适合我的样本:
from sqlalchemy import exc
...
connection = db.engine.connect()
trans = connection.begin()
try:
retval = connection.execute(
'SELECT * FROM add_purchase(%s, %s, %s, %s, %s, %s, %s);',
clean_data.account_id, amount, tax, deposit,
clean_data.pos_id, g.token_id,
clean_data.external_reference_id).first() …Run Code Online (Sandbox Code Playgroud) 我有一个Postgresql 9.3数据库编码'UTF8'.但是,数据库中有一列不应包含除ASCII之外的任何内容.如果非ascii进入那里,它会导致另一个我无法控制的系统出现问题.因此,我想为列添加约束.注意:我已经有一个BEFORE INSERT触发器 - 所以这可能是一个检查的好地方.
在PostgreSQL中实现这一目标的最佳方法是什么?
我在尝试在触发函数中调试时遇到错误。在 Postgres 日志中,我有以下内容:
2012-08-16 21:41:23 PDT ERROR: Unknown period: D
2012-08-16 21:41:23 PDT CONTEXT: PL/pgSQL function "handle_promotion_update"
line 60 at assignment
SQL statement "UPDATE promotion SET some_column = foo + 1
WHERE id = NEW.promotion_id"
PL/pgSQL function "handle_new_reward" line 94 at SQL statement
Run Code Online (Sandbox Code Playgroud)
所以,看来我的问题可能从“第 60 行”开始
我的问题是行号从哪里开始?如果我进入 pgAdmin 并查看函数声明,它的顶部有“helper”(如删除函数)。所以,我不认为它来自那里。但是,它包含函数声明吗?或者只是从 行开始BEGIN?
我是一个具有非常好的RDBMS经验的python开发人员.我需要处理相当大量的数据(大约500GB).数据位于s3存储桶中的大约1200个csv文件中.我用Python编写了一个脚本,可以在服务器上运行它.但是,这太慢了.根据当前的速度和数据量,大约需要50天才能完成所有文件(当然,截止日期之前还有很长时间).
注意:处理是你的基本ETL类型的东西 - 没什么可怕的幻想.我可以轻松地将它泵入PostgreSQL中的临时模式,然后在其上运行脚本.但是,再次,从我最初的测试,这将是缓慢的方式.
注意:一个全新的PostgreSQL 9.1数据库将是它的最终目的地.
所以,我正在考虑尝试启动一堆EC2实例来尝试分批运行它们(并行).但是,我之前从未做过这样的事情所以我一直在寻找想法等等.
再说一遍,我是一个python开发人员,所以看起来像Fabric + boto可能很有希望.我不时使用boto,但从未体验过Fabric.
我从阅读/研究中了解到这对Hadoop来说可能是一个很好的工作,但我不知道它并且不能雇用它完成,时间线不允许学习曲线或雇用某人.我也不应该,这是一次性交易.所以,我不需要构建一个非常优雅的解决方案.我只需要它可以工作,并能够在年底之前完成所有数据.
另外,我知道这不是一个简单的stackoverflow问题(类似"如何在python中反转列表").但是,我所希望的是有人读这篇文章并且"说,我做类似的东西并使用XYZ ......它很棒!"
我想我所问的是有没有人知道我可以用来完成这项任务的任何事情(鉴于我是一名Python开发人员,我不知道Hadoop或Java - 并且有一个紧迫的时间表,可以防止我学习像Hadoop这样的新技术或学习一门新语言
谢谢阅读.我期待着任何建议.
postgresql ×5
python ×5
django ×3
unit-testing ×2
boto ×1
fabric ×1
flask ×1
git ×1
github ×1
installation ×1
mocking ×1
mysql ×1
passwords ×1
pgadmin ×1
plpgsql ×1
python-2.7 ×1
python-mock ×1
sqlalchemy ×1
triggers ×1
ubuntu-10.04 ×1
virtualenv ×1