相关疑难解决方法(0)

使用Django将数千条记录插入SQLite表的有效方法是什么?

我必须使用Django的ORM将8000多条记录插入到SQLite数据库中.此操作需要每分钟大约运行一次cronjob.
目前我正在使用for循环迭代所有项目,然后逐个插入它们.
例:

for item in items:
    entry = Entry(a1=item.a1, a2=item.a2)
    entry.save()
Run Code Online (Sandbox Code Playgroud)

这样做的有效方法是什么?

编辑:两种插入方法之间的一点比较.

没有commit_manually装饰器(11245条记录):

nox@noxdevel marinetraffic]$ time python manage.py insrec             

real    1m50.288s
user    0m6.710s
sys     0m23.445s
Run Code Online (Sandbox Code Playgroud)

使用commit_manually decorator(11245条记录):

[nox@noxdevel marinetraffic]$ time python manage.py insrec                

real    0m18.464s
user    0m5.433s
sys     0m10.163s
Run Code Online (Sandbox Code Playgroud)

注意:除了插入数据库之外,测试脚本还执行一些其他操作(下载ZIP文件,从ZIP存档中提取XML文件,解析XML文件),因此执行所需的时间不一定代表插入所需的时间记录.

python sql sqlite django insert

67
推荐指数
2
解决办法
6万
查看次数

如何解决sqlite和c#中的"'"问题?

我正在使用Sqlite在Microsoft Visual C#2008 Express中工作.

我知道我的文本中的一个叛逆者(')在查询中有问题.我的问题是,我认为我可以用\'替换它.它似乎没有工作......这是我的代码的一个例子:

string myString = "I can't believe it!";
cmd.CommandText = "Insert into myTable (myid,mytext) values (1,'" + myString.Replace("'","\\'") + "');";
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:SQLite错误:接近"t":语法错误

我尝试过其他一些替换品......就像其他的斜线一样.我将我的字符串和我的字符串的替换版本写入控制台,以确保它正确出现.

我在这里犯了什么愚蠢的错误?

谢谢!

-Adeena

c# sqlite string

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

Django - SQL bulk get_or_create possible?

I am using get_or_create to insert objects to database but the problem is that doing 1000 at once takes too long time.

I tried bulk_create but it doesn't provide functionality I need (creates duplicates, ignores unique value, doesn't trigger post_save signals I need).

甚至可以通过自定义的SQL查询批量进行get_or_create吗?

这是我的示例代码:

related_data = json.loads(urllib2.urlopen(final_url).read())

for item in related_data:

    kw = item['keyword']
    e, c = KW.objects.get_or_create(KWuser=kw, author=author)
    e.project.add(id)
    #Add m2m to parent project
Run Code Online (Sandbox Code Playgroud)

related_data包含1000行,如下所示:

[{"cmp":0,"ams":3350000,"cpc":0.71,"keyword":"apple."},
{"cmp":0.01,"ams":3350000,"cpc":1.54,"keyword":"apple -10810"}......]
Run Code Online (Sandbox Code Playgroud)

KW模型还会发送我用来创建另一个父模型的信号:

@receiver(post_save, sender=KW)
def grepw(sender, **kwargs):
    if kwargs.get('created', False):
        id …
Run Code Online (Sandbox Code Playgroud)

sql django postgresql django-models

6
推荐指数
2
解决办法
2318
查看次数

为什么我的django批量数据库数量如此之慢并经常失败?

我决定使用django的模型系统而不是编写原始SQL来与我的数据库接口,但我遇到的问题肯定是可以避免的.

我的models.py包含:

class Student(models.Model):
    student_id = models.IntegerField(unique = True)
    form = models.CharField(max_length = 10)
    preferred = models.CharField(max_length = 70)
    surname = models.CharField(max_length = 70)
Run Code Online (Sandbox Code Playgroud)

我通过循环遍历列表来填充它,如下所示:

from models import Student

for id, frm, pref, sname in large_list_of_data: 
   s = Student(student_id = id, form = frm, preferred = pref, surname = sname)
   s.save()
Run Code Online (Sandbox Code Playgroud)

我真的不想每次都将它保存到数据库中,但我不知道另一种方法让django不要忘记它(我宁愿添加所有行然后再做一次提交).

代码有两个问题.

  1. 这很慢 - 大约20名学生每秒更新一次.

  2. 它甚至没有通过large_list_of_data,而是抛出一个说"无法打开数据库文件"的DatabaseError.(可能是因为我使用的是sqlite3.)

我的问题是:我怎样才能阻止这两件事发生?我猜这两个问题的根源是我有s.save()但是我没有看到一种方法可以轻松地将学生批处理,然后将它们保存在数据库的一次提交中.

database sqlite django django-models

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

标签 统计

django ×3

sqlite ×3

django-models ×2

sql ×2

c# ×1

database ×1

insert ×1

postgresql ×1

python ×1

string ×1