我有一个Python类,其属性名为:date1,date2,date3等.
在运行时,我有一个变量i,它是一个整数.
我想要做的是根据i的值在运行时访问适当的日期属性.
例如,
如果我== 1,我想访问myobject.date1
如果我== 2,我想访问myobject.date2
我想为类而不是属性做类似的事情.
例如,我有一堆类:MyClass1,MyClass2,MyClass3等.我有一个变量k.
如果k == 1,我想实例化一个新的MyClass1实例
如果k == 2,我想实例化一个新的MyClass2实例
我怎样才能做到这一点?
编辑
我希望避免使用巨大的if-then-else语句来选择合适的属性/类.
有没有办法在Python中使用变量的值动态编写类名?
我的网页需要10到20个数据库查询才能获得所有必需的数据.
通常在发出查询后,Django线程/进程被阻塞,等待结果返回,然后它将继续执行,直到它到达下一个查询.
有没有办法异步发出所有查询,以便它们可以由数据库服务器并行处理?
我正在使用MySQL,但也希望了解其他数据库的解决方案.例如,我听说Postgresql有一个异步客户端库 - 在这种情况下如何使用它?
Django ORM是否支持SQL IN
运算符?就像是:
SELECT *
FROM user
WHERE id IN (1, 5, 34, 567, 229)
Run Code Online (Sandbox Code Playgroud)
如何使用Django ORM进行类似的查询?
谢谢.
在我的Django应用程序中,我经常需要做类似的事情get_or_create()
.例如,
用户提交标签.需要查看该标记是否已存在于数据库中.如果没有,请为其创建新记录.如果是,只需更新现有记录.
但是看看get_or_create()
它的文档似乎不是线程安全的.线程A检查并查找记录X不存在.然后线程B检查并发现记录X不存在.现在,线程A和线程B都将创建一个新的记录X.
这一定是非常普遍的情况.我如何以线程安全的方式处理它?
我有一个用Django构建的Q&A类型的网站,其中包含以下模型:
class Question(models.Model):
title = models.CharField(max_length=70)
details = models.TextField()
class Answer(models.Model):
question_id = IntegerField()
details = models.TextField()
Run Code Online (Sandbox Code Playgroud)
我需要显示一个特定的问题及其答案.通常我需要2个查询来做到这一点:
Question.objects.get(id=1)
Answer.objects.get(question_id=1)[:10]
Run Code Online (Sandbox Code Playgroud)
我希望使用一个查询检索所有内容.在MySQL中,它将是:
SELECT *
FROM Question JOIN Answer ON Question.id=Answer.question_id
WHERE Question.id=1
LIMIT 10
Run Code Online (Sandbox Code Playgroud)
无论如何我可以通过Django的ORM来做到这一点吗?请问extra()
在这种情况下帮助吗?
在Django中,模型的字段被定义为类属性.
那么这意味着模型的所有实例都会为这些字段共享相同的值,不是吗?
说我有一个模特
class Tag(models.Model):
name = models.CharField(max_length=30)
Run Code Online (Sandbox Code Playgroud)
我有一个表单,用户可以在其中提交标签.假设用户提交了2个标签:"Python"和"Django".如果我在视图中创建了2个Tag实例:
t1 = Tag(name="Python")
t2 = Tag(name="Django")
Run Code Online (Sandbox Code Playgroud)
既然name
是一个类属性不应该都t1
和t2
有相同的值name
,在这种情况下,应该是"Django的"?
但实际上name
行为类似于实例属性而不是类属性.你能解释一下发生了什么吗?
我想把一个句子分成一个单词列表.
对于英语和欧洲语言,这很简单,只需使用split()
>>> "This is a sentence.".split()
['This', 'is', 'a', 'sentence.']
Run Code Online (Sandbox Code Playgroud)
但是我还需要处理不使用空格作为单词分隔符的中文等语言的句子.
>>> u"??????".split()
[u'\u8fd9\u662f\u4e00\u4e2a\u53e5\u5b50']
Run Code Online (Sandbox Code Playgroud)
显然这不起作用.
如何将这样的句子分成单词列表?
更新:
到目前为止,答案似乎表明这需要自然语言处理技术,并且中文中的单词边界是模糊的.我不确定我明白为什么.中文中的单词边界对我来说非常明确.每个中文单词/字符都有一个相应的unicode,并在屏幕上显示为单独的单词/字符.
那么模糊性来自何处.正如您在我的Python控制台输出中所看到的,Python可以告诉我的例句由5个字符组成:
? - u8fd9
? - u662f
? - u4e00
? - u4e2a
? - u53e5
? - u5b50
Run Code Online (Sandbox Code Playgroud)
所以很明显Python告诉单词/字符边界没有问题.我只需要列表中的那些单词/字符.
我发现这篇关于猴子修补Django的帖子:
from django.contrib.auth.models import User
User.add_to_class('openid', models.CharField(max_length=250,blank=True))
def get_user_name(self):
if self.first_name or self.last_name:
return self.first_name + " " + self.last_name
return self.username
User.add_to_class("get_user_name",get_user_name)
Run Code Online (Sandbox Code Playgroud)
我知道这并不理想,最好User
通过单独的模型添加字段和函数Profile
.
话虽如此,我只是想了解这是如何工作的:
我会把猴子修补代码放在哪里?
代码何时运行 - 只需一次?每个Python解释器启动一次?每次请求一次?
据推测,我仍然需要更改数据库架构.所以,如果我放弃桌子User
并跑了./manage.py syncdb
,会syncdb
"知道"已经添加了一个新字段User
吗?如果不是,我如何更改架构?
我试图寻找有关MySQL InnoDB的各种文件系统的性能的基准,但找不到任何.
我的数据库工作负载是典型的基于Web的OLTP,大约90%读取,10%写入.随机IO.
在流行的文件系统中,例如ext3,ext4,xfs,jfs,Reiserfs,Reiser4等,您认为哪一个最适合MySQL?
Stackoverflow通过获取当前问题的标题并根据Google删除10,000个最常见的英语单词来实现其"相关问题"功能.然后将剩余的单词作为全文搜索提交以查找相关问题.
我想在我的Django网站上做类似的事情.对Python中的一长串单词过滤字符串(在本例中为问题标题)的最佳方法是什么?任何能让我高效做到这一点的图书馆?
django ×7
python ×6
database ×2
django-orm ×2
mysql ×2
nlp ×2
string ×2
asynchronous ×1
benchmarking ×1
cjk ×1
concurrency ×1
filesystems ×1
join ×1
linux ×1
nonblocking ×1
postgresql ×1
unicode ×1