我想使用Django管理员浏览和现有数据库,但我想确保我或Django不会对此数据库进行任何修改.
出于这个原因,我想我应该使用两个数据库,一个是只读的,一个是存储其他django表,一个是我有读写访问权限.
我知道如何定义多个数据库,settings.py但我不知道如何强制django为特定模型使用另一个数据库.
我使用的 sqlite3 数据库设置如下settings.py:
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.spatialite',
'NAME': 'path/to/config.sqlite',
'TEST_NAME': 'path/to/test-config.sqlite',
# ... USER, PASSWORD and PORT left out for brevity
}
}
Run Code Online (Sandbox Code Playgroud)
在测试运行期间开始于:
python manage.py test myapp.mytest
Run Code Online (Sandbox Code Playgroud)
这会临时创建一个数据库文件path/to/test-config.sqlite,我需要在另一个加载了所需装置的应用程序中使用该文件。
然而,数据库文件是空的,我在一个测试的暂停期间断言:
sqlite> select * from someapp_somemodel;
... no results here :(
Run Code Online (Sandbox Code Playgroud)
其他不需要sqlite文件并且内存数据库就足够的测试用例,不会发生错误。
我的问题:
编辑
如果有任何兴趣,我正在使用 Django 1.3.1。
编辑2
我熟悉fixtures,我用它们来填充数据库,但我的问题是fixtures 中的数据在测试过程中没有写入数据库文件。对不起,如果我对这个事实不够清楚。
编辑3
由于我的问题需要一些澄清,请考虑以下测试设置(与我实际做的很接近):
class SomeTestCase(django.test.TestCase):
fixtures = ["some_fixture.json", "some_other_fixture.json"]
def testSomething(self):
import pdb; pdb.set_trace()
Run Code Online (Sandbox Code Playgroud)
当testSomething方法运行到断点时,我启动sqlite3程序并连接到 …
是否可以将AWS DynamoDB设置为为Django服务器支持的数据库?如果是这样,我该怎么做呢?
谢谢!
python django amazon-web-services django-database amazon-dynamodb
一个伙伴和我正在开发一个Django应用程序,并正在使用git(GitHub).
在我们工作的时候,我们会在我们的网站上制作虚假账户,登录并将内容上传到数据库等等,以便进行测试.这是问题:每次我们在GitHub上合并分支时,我们都会遇到与数据库文件的合并冲突.当然,这是因为我们的数据库文件在存储库中,并且由于我们单独测试,因此文件的本地副本会有不同的发展.
我想要做的是让数据库文件在存储库之外.这样,我们可以合并,并始终保持我们自己的数据库副本运行,独立于其他人的本地副本.
但是,我们的settings.py文件必须相同,因此我们无法指定本地路径(即'Users/sgarza62/Desktop'或'Users/rada/Desktop).这是理想的,但settings.py文件是一个共享文件,因此它在存储库的两个副本中必须相同.
通过以下内容,我们已经能够避免使用本地路径:
## settings.py
from os.path import dirname, join
PROJECT_DIR = dirname(__file__)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': join(PROJECT_DIR, 'foo.db'),
'USER': '',
'PASSWORD': '',
'HOST': '',
'PORT': '',
}
}
Run Code Online (Sandbox Code Playgroud)
什么是理想的,是这样的:
## settings.py
from os.path import dirname, join
PROJECT_DIR = dirname(__file__)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': join('../../../', PROJECT_DIR, 'foo.db'), # this path is outside the repository (ie, 'Users/sgarza62/foo.db')
'USER': '',
'PASSWORD': '',
'HOST': '',
'PORT': '', …Run Code Online (Sandbox Code Playgroud) 多年来我一直使用较旧的transaction.commit_on_success和transaction.commit_manually与Django <1.6.但是现在使用Django 1.6,旧的API主要用transaction.atomic替换.
在阅读新API的文档后,我仍然不确定如何将以下代码提交到数据库:
def a_first_function():
with transaction.atomic():
a_second_function_successful()
a_third_function_fails()
def a_second_function_successful():
with transaction.atomic():
do_something()
def a_third_function_fails():
do_something_wrong()
Run Code Online (Sandbox Code Playgroud)
在此示例中,假设从a_first_function调用的a_second_function_successful成功并从模型创建/保存对象.在second_function成功之后,第三个函数被立即调用并失败.
鉴于在第一个和第二个函数中使用了使用上下文管理器的transaction.atomic,在a_second_function_successful中创建/修改的数据会发生什么.它会被提交到数据库吗?它会从第一个函数自动回滚吗?我的经验是,第二个函数将被提交,但是,我预计它不会被提交.
如果第三个函数定义如下,它现在会有什么不同:
@transaction.atomic
def a_third_function_fails():
do_something_wrong()
Run Code Online (Sandbox Code Playgroud)
或作为:
def a_third_function_fails():
with transaction.atomic():
do_something_wrong()
Run Code Online (Sandbox Code Playgroud)
谢谢,
我正在用python-django编写一个多租户应用程序.
我想根据每个请求设置数据库连接.我想我可以写一个中间件,我们设置数据库用于该特定数据库.
import re
from django.db import connections
class SetTenantDatabase(object):
def process_request(self, request):
pattern = re.compile("\\b(http://|https://|www.|.com|8000|:|//)\\W\\d+", re.I)
words = request.get_host()
db_name = [pattern.sub("", words)][0].split('.')[0]
connections.databases['new-alias'] = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'store1',
'USER': 'xxx',
'PASSWORD': 'xxx',
'HOST': '127.0.0.1',
}
}
conn = connections['new-alias']
return None
Run Code Online (Sandbox Code Playgroud)
但这不起作用.我该怎么办呢.方法错了或解决方案是否可行,最后如何?
我在AWS上创建了一个PostgreSQL数据库,我想将它用于Django项目.
我修改了settings.py以便它有
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': <db name>,
'USER': <user>,
'PASSWORD': <password>,
'HOST': 'projectdevelopment.foobar.us-east-1.rds.amazonaws.com',
'PORT': '5432',
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这看起来很简单.除了当我尝试进行迁移时,我收到此错误:
django.db.utils.OperationalError: could not translate host name "projectdevelopment.foobar.us-east-1.rds.amazonaws.com" to address: nodename nor servname provided, or not known
Run Code Online (Sandbox Code Playgroud)
该值projectdevelopment.foobar.us-east-1.rds.amazonaws.com已直接从RDS控制台中端点下的值复制.
我错过了一个设置,还是配置错误了?或两者?
我正在从测试SQLite数据库迁移到PostgreSQL数据库.
我有一个插入数据库的示例对象,它在SQLite上工作,但在PostgreSQL中给我一个错误.
代码段是:
car = CarItem.objects.create(
user = motor_trend,
name = 'Camaro 2010',
category = cars,
condition = 'Used',
price = '28,547.00',
production_year = '2010',
color_interior = 'Black',
color_exterior = 'Inferno Orange Metallic',
reference = 'PRC17288',
location_of_creation = 'Undisclosed',
location_current = 'Columbus, OH, USA',
description = 'GORGEOUS ORANGE SS!!',
)
car.save()
Run Code Online (Sandbox Code Playgroud)
我得到一个:
DatabaseError at /create/
value too long for type character varying(512)
Traceback
(...)
description = 'GORGEOUS ORANGE SS!!',
(...)
Run Code Online (Sandbox Code Playgroud)
我的模型的描述字段有512个最大字符长度:
description = models.CharField(max_length=512,default='')
Run Code Online (Sandbox Code Playgroud)
但是字符串不能超过512字节.
我之前读过有关此错误的帖子,其中一篇涉及编码.似乎并非如此.
我在Webfaction上托管.我创建了一个使用utf-8编码的数据库,然后继续使用syncdb.Syncdb工作正常但现在这个对象插入失败了.
有人可以提供一些意见吗?谢谢.
我想在Django启动时初始化一些变量(来自数据库).
我能够从数据库中获取数据,但问题是如何调用initialize方法.这应该只调用一次.
尝试查看其他页面,但无法找到答案.
代码目前看起来像这样::
def get_latest_dbx(request,....):
#get数据库中的数据
def get_latest_x(request):
get_latest_dbx(请求中,x,......)
def启动(请求):
get_latest_x(请求)
我正在使用django框架,我遇到了运行makemigration命令的问题.这是模型的副本及其生成的堆栈跟踪.我看过几个帖子有同样的错误,但没有一个让我在这里解决我的问题.我正在使用django 1.9.4
from django.db import models
import os, uuid
# Create your models here.
def video_directory_path(instance, folder):
return os.path.join('video', str(instance.person.id), str(instance.video_id))
def photo_directory_path(instance, folder):
return os.path.join('image', str(instance.person.id), str(instance.photo_id))
class Image(models.Model):
name = models.CharField(max_length=128)
photo_id = models.UUIDField(verbose_name='photo id', default=uuid.uuid4, editable=False, unique=True)
photo = models.ImageField(upload_to=photo_directory_path)
person = models.ForeignKey('Person', on_delete=models.CASCADE)
movie = models.ForeignKey('Movie', on_delete=models.CASCADE)
class Meta:
db_table = 'Image'
def __str__(self):
return '[{0}- {1}]'.format(self.__class__.__name__, self.id)
def __repr__(self):
return self.__str__()
class Video(models.Model):
name = models.CharField(max_length=128)
video_id = models.UUIDField(verbose_name='video id', default=uuid.uuid4, editable=False, unique=True) …Run Code Online (Sandbox Code Playgroud) django ×10
django-database ×10
python ×5
postgresql ×2
django-views ×1
git ×1
github ×1
multi-tenant ×1
psycopg2 ×1
sqlite ×1
transactions ×1