gpt4 book ai didi

python - 在没有 ORM 的情况下使用 Python 中的数据库

转载 作者:搜寻专家 更新时间:2023-10-30 19:42:10 25 4
gpt4 key购买 nike

在 Python 中使用数据库(主要是 MySQL)的标准/推荐方式是什么?

我不要ORM,越轻越好。我不介意编写自己的 SELECT,但我想要映射字典的东西,例如,执行 INSERT 和 UPDATE。我主要是一名 PHP 程序员,我习惯于做这样的事情:


$data = array(
'foo' => 'bar'
);

$insert = $db->insert('table', $data);

Python 有这样的东西吗?我研究了 SQLAlchemy,显然每个人都在使用它,它的“SQL 表达式”看起来不错,但使用整个东西来基本上编写原始 SQL 似乎有点过分了。

最佳答案

要使用字典进行插入,您正在寻找支持 "named" (placeholder) paramstyle 的数据库驱动程序(在链接中搜索“paramstyle”):

来自sqlite3 docs :

import sqlite3
con = sqlite3.connect("mydb")
cur = con.cursor()

who = "Yeltsin"
age = 72

cur.execute("select name_last, age from people where name_last=:who and age=:age",
{"who": who, "age": age})
print cur.fetchone()

不幸的是,对于 MySQL,两个主要驱动程序,MySQLdboursql不支持“命名”参数样式。 MySQLdb 使用“format”参数样式(使用“%s”),而 oursql 使用“qmark”参数样式(使用“?”)。这两种参数样式都要求您提供 list 而不是参数的 dict:

x={'bar':1.0,'baz':2.0}
sql='INSERT INTO foo (bar,baz) VALUES (?,?)'
cur.execute(sql,[x['bar'],x['baz']])

顺便说一句,如果你需要一个驱动程序来连接MySQL,使用oursql .MySQLdb 历来是 Python-MySQL 交互的首选驱动程序,但该驱动程序使用 regex 将您的 SQL 和参数转换为一个带引号的字符串,然后将其发送到 MySQL。相比之下,oursql 使用准备语句,分别发送 SQL 和参数,eschewing the need for escaping data . oursql 方式是正确的方式,避免了 certain bugs这困扰着 MySQLdb。

关于python - 在没有 ORM 的情况下使用 Python 中的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4933355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com