我不太确定stackoverflow是一个普遍问题的地方,但让我们试一试.
由于需要在某处存储应用程序数据,我总是使用MySQL或sqlite,因为它总是这样做.由于整个世界似乎都在使用这些数据库(大多数软件产品,框架等),像我这样的初级开发人员很难开始考虑这是否是一个好的解决方案.
好吧,假设我们的应用程序中有一些面向对象的逻辑,并且对象以某种方式相互关联.我们需要将此逻辑映射到存储逻辑,因此也需要数据库对象之间的关系.这导致我们使用关系数据库,我很好 - 简单来说,我们的数据库表行有时需要引用其他表的行.但为什么要使用SQL语言与这样的数据库进行交互?
SQL查询是一条短信.我可以理解这对于实际理解它的作用很酷,但是对于部署之前没有人见过的应用程序的一部分使用文本表和列名称是不是很愚蠢?如果您必须从头开始编写数据存储,那么您将从未使用过这种解决方案.就个人而言,我会使用一些'编译的数据库查询'字节码,它将在客户端应用程序中组装一次并传递给数据库.它肯定会用id号命名表和冒号,而不是ascii-strings.在表结构发生变化的情况下,可以根据新的db模式重新编译这些字节查询,存储在XML或类似的东西中.
我的想法有什么问题?我有什么理由不自己编写并使用SQL数据库吗?
编辑让我的问题更清楚.大多数答案都声称SQL是一种文本查询,可以帮助开发人员更好地理解查询本身并更容易地调试它.就个人而言,我还没有看到人们手工编写SQL查询一段时间.我认识的每个人,包括我,都在使用ORM.这种情况,我们建立一个新的抽象级别来隐藏SQL,导致思考我们是否需要SQL.如果你能提供一些不使用ORM而使用SQL的例子以及原因,我将非常感激.
EDIT2 SQL是人与数据库之间的接口.问题是为什么我们必须将它用于应用程序/数据库交互?我仍然要求人类编写/调试SQL的例子.
我正在寻找一种迭代迭代迭代的第一n项的pythonic方法(upd:在常见情况下不是列表,因为列表事情是微不足道的),并且尽可能快地执行此操作非常重要.这是我现在这样做的方式:
count = 0
for item in iterable:
do_something(item)
count += 1
if count >= n: break
Run Code Online (Sandbox Code Playgroud)
对我来说似乎并不整洁.另一种方法是:
for item in itertools.islice(iterable, n):
do_something(item)
Run Code Online (Sandbox Code Playgroud)
这看起来不错,问题是它是否足够快与一些发电机一起使用?例如:
pair_generator = lambda iterable: itertools.izip(*[iter(iterable)]*2)
for item in itertools.islice(pair_generator(iterable), n):
so_something(item)
Run Code Online (Sandbox Code Playgroud)
与第一种方法相比,它运行得足够快吗?有没有更简单的方法呢?
我一直在测试我的应用程序并遇到错误,似乎与应用程序本身没有任何关系.我有这样的单元测试:
class TagSaveAndLoadTest(TestCase):
fixtures = ['users.json']
def setUp(self):
self.client = Client()
self.client.login(user='test_user', password='123')
def test_register_save(self):
tag_dict = {
'sex' : 4,
'drugs' : 3,
'rocknroll' : 1,
}
response = self.client.post('/register/save_tags/', {'skilltags' : json.dumps(tag_dict)})
self.assertEqual(response.status_code, 200)
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:TypeError: int() argument must be a string or a number, not 'AnonymousUser'.出现在追踪文件是base.py,manages.py,query.py等它看起来像我的请求被在中间件的地方卡住了,我不知道如何对付它.如果请求不能达到我的视野甚至控制器怎么可能呢?如果'setUp()'函数记录测试用户,为什么AnonymousUser会出现问题?
可以在这里找到完整的回溯,提前感谢!
假设我有大量的异构JSON文档(即命名的键值映射)和这些文档附加到的类的层次结构(即命名集).我需要设置一个允许以下内容的数据结构:
我最初提出了将JSON文档存储在面向文档的数据库(如CouchDB或MongoDB)中并将类层次结构存储在RDF存储(如4store)中的想法.1,2并4随后想通了自然,并3通过保持附加文档ID列表中存储的每个类解决.
但后来我认为RDF存储实际上可以通过ID检索JSON文档的文档导向部分.乍一看这似乎是真的,但我仍然关心2和3.是否有一个RDF存储能够以速度面向文档的db的服务文档检索文档(节点)?它的服务速度有多快3?我听说过RDF存储缓慢,具体化问题等等.
是否有一个RDF存储也可以像ID那样随意检索对象,例如CouchDB?使用面向文档和RDF存储来存储,检索和编辑类似JSON的对象有什么区别?
我正在尝试从一个xml.dom.minidom对象写入内容.简单的想法是使用'writexml'方法:
import codecs
def write_xml_native():
# Building DOM from XML
xmldoc = minidom.parse('semio2.xml')
f = codecs.open('codified.xml', mode='w', encoding='utf-8')
# Using native writexml() method to write
xmldoc.writexml(f, encoding="utf=8")
f.close()
Run Code Online (Sandbox Code Playgroud)
问题是它破坏了文件中的非拉丁文编码文本.另一种方法是获取文本字符串并将其显式写入文件:
def write_xml():
# Building DOM from XML
xmldoc = minidom.parse('semio2.xml')
# Opening file for writing UTF-8, which is XML's default encoding
f = codecs.open('codified3.xml', mode='w', encoding='utf-8')
# Writing XML in UTF-8 encoding, as recommended in the documentation
f.write(xmldoc.toxml("utf-8"))
f.close()
Run Code Online (Sandbox Code Playgroud)
这会导致以下错误:
Traceback (most recent call last):
File "D:\Projects\Semio\semioparser.py", line 45, …Run Code Online (Sandbox Code Playgroud)