gpt4 book ai didi

python - 如何在不编写 SQL 的情况下在 python 中使用 SQL 数据库?

转载 作者:太空宇宙 更新时间:2023-11-03 14:14:29 25 4
gpt4 key购买 nike

我正在寻找一种在 python 中使用 SQL 数据库(例如 MySQL、SQLite)而无需实际编写 SQL 的方法。示例将是这样的(伪代码):

# INSERT INTO table (firstname, lastname) VALUES ('John', 'Smith')
table.insert({'firstname':'John', 'lastname':'Smith'})

# SELECT * FROM table WHERE name='John'
results = table.select({'firstname': 'John'})
print results
# [ {'firstname':'John', 'lastname':'Smith'} ]

围绕 python 的 DB-API 的轻型包装器,或者可能是非常轻量级的 ORM,可以完成这项工作。如果它是一个 ORM,它应该允许将 namedtuple 映射到数据库,因为这几乎是我想要使用的唯一一种对象。我确定这样的东西已经存在,但我很难找到它:)

编辑 一些提议的解决方案不是我想要的:

SQL 炼金术

好:插入和选择相当简洁

不好:存储和检索的对象不是普通的 python dicts/namedtuples/任何东西(可能它们可以被做成 namedtuples,但如何做并不明显)

丑陋的:必须显式地为每个表创建一个类使得它太重量级了

class User(Base):
__tablename__ = 'users'
id = Column(Integer, Sequence('user_id_seq'), primary_key=True)
name = Column(String(50))
fullname = Column(String(50))
...

ed_user = User(name='ed', fullname='Ed Jones', password='edspassword')
session.add(ed_user)

our_user = session.query(User).filter_by(name='ed').first()
our_user
<User(name='ed', fullname='Ed Jones', password='edspassword')>

小马ORM

好:将查询编写为生成器的方式纯属天才

不好的:仍然使用自定义对象,而不是内置的 python 数据类型

丑陋的:和SQL Alchemy一样,需要为每个表创建一个类

from pony.orm import *

db = Database()
class Person(db.Entity):
name = Required(str)
age = Required(int)

p1 = Person(name='John', age=20)
commit()

persons = select(p for p in Person if p.age > 20)

最佳答案

您只需要做一些更多的工作 - 通过阅读文档。 SQLAlchemy 可能具有最简单的“数据库逆向工程”形式(称为反射),详见 here .

最简单的例子:

from sqlalchemy import *

metadata = MetaData()
engine = create_engine('mysql+mysqldb://scott:tiger@localhost/foo')
person_table = Table('person', metadata, autoload=True, autoload_with=engine)
q = person_table.insert().values(name='John', age=20)
connection = engine.connect()
connection.execute(q)

关于python - 如何在不编写 SQL 的情况下在 python 中使用 SQL 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34504403/

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