如何使用变量减少sqlite3代码?

2024-04-30 05:18:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有大约500行sqlite代码,我正在努力减少这个数字。所以我试着用变量做一个函数。你知道吗

我试着用这个代码:

x = "c.execute("
o = "'"
y = "'INSERT INTO "
unio = x+y
tabl = ["d","d_2","n_d","n_d_2"]
val = "VALUES ("
w = ") "
k = "?,?"
mark = 369
ek = 963
def db_up(table,):
    aa = y+table+"("+tabl[0] + ", " + tabl[1]+w+val+k+")"+"',"+"(mark,ek,)"
    bb = unio+table+"("+tabl[1]+ ", " + tabl[1]+w+val+k+")"+"',"+"(mark,ek,))"
    print(aa)  # 'INSERT INTO avg_dt(d, d_2) VALUES (?,?)',(mark,ek,)
    print(bb)  # c.execute('INSERT INTO avg_dt(d_2, d_2) VALUES (?,?)',(mark,ek,))
    c.execute(str(aa))  # no succes
    c.execute(aa)  # no success
    bb  # no success

当我运行“c.execute(aa)”行时。它向我抛出了一个错误:

sqlite3.OperationalError: near "'INSERT INTO avg_dt(d, d_2) VALUES (?,?)'": syntax error

那么…如何使用变量和函数生成sqlite3代码? 感谢您抽出时间;)


Tags: no代码executedttablevalaaavg
1条回答
网友
1楼 · 发布于 2024-04-30 05:18:37

我不能发表评论与我目前的代表,所以让我试着提供一个完整的答案。你知道吗

你的方法似乎是你有太多的SQL代码,你认为这是一个问题,所以你试图“压缩”代码,减少到较短的变量名常见语句。你应该避免这样做的原因有很多,还有很多更好的方法可以达到类似的效果。你知道吗

首先,让我们谈谈为什么这是个坏主意:

  • 您的代码并没有变得更易于维护。在代码中插入像xoyunio这样的神秘变量名并不会使代码更易于阅读,即使是对作者来说,假设编写代码已经过了几天。

  • 使用这种方法不会使代码的性能提高,而且很可能会使代码的性能降低:在执行字符串插值或串联时,程序现在必须担心分配和重新分配内存,这需要周期。

  • 在SQL中进行字符串插值或连接时应特别小心:这基本上是prepared statements的自制版本,通常由有大量SQL编程经验的人编写。如果您自己这样做,您的程序就有可能成为SQL注入的目标(或者至少是列/值类型不匹配)。

现在,让我们来为您讨论如何缓解这个问题:

  • 许多SQL代码不必是不可管理的:通常,如果您必须在项目中维护大量原始SQL,您可以将其转储到单独的SQL文件中,然后您可以直接从数据库CLI执行,也可以通过数据库驱动程序从程序运行。

  • ORMs是(通常)您的朋友:除了异国情调或对性能非常敏感的SQL查询之外,现代ORMs可以去除程序中大多数原始的SQL代码。ORM代码的更自然的编程结构也意味着您可以将其分解为不同的委托函数,以在一定程度上避免代码重用。

请随时补充您的问题的细节,因为它的立场,它不完全清楚您的关切是否可以解决这个答案。你知道吗

相关问题 更多 >