You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

资深.NET程序员转Python新手:Python如何实现返回自定义对象获取客户记录?

嗨!作为同样从.NET转Python的开发者,我太懂你这种想找到熟悉模式的心情了——把数据库记录读取到自定义对象里,在Python里其实逻辑和.NET很像,咱们一步步来实现:

在Python中实现数据库读取并返回自定义对象

1. 定义你的Customer类

类比.NET里的自定义实体对象,Python用class来定义。如果是Python 3.7及以上版本,非常推荐用dataclass,它能帮你省去写__init__方法的冗余代码,和.NET里的POCO类写法几乎一致:

from dataclasses import dataclass

@dataclass
class Customer:
    id: int
    name: str
    email: str
    phone: str
    # 在这里继续添加你需要的所有客户字段,和.NET的Customer对象一一对应即可

如果需要兼容更低版本的Python,就用传统的类定义方式:

class Customer:
    def __init__(self, id: int, name: str, email: str, phone: str):
        self.id = id
        self.name = name
        self.email = email
        self.phone = phone
        # 其他字段同理,逐个初始化

2. 实现读取数据库的ReadCustomerRecord函数

Python里操作数据库需要对应的驱动库,比如连接SQL Server用pyodbc(和.NET的ODBC逻辑类似)、PostgreSQL用psycopg2、MySQL用mysql-connector-python,内置的SQLite用sqlite3。这里以pyodbc连接SQL Server为例,逻辑和.NET的数据库操作完全对齐:

import pyodbc

def ReadCustomerRecord(customer_id: int) -> Customer:
    # 数据库连接字符串,格式和.NET的连接串很像,替换成你的实际配置
    conn_str = "DRIVER={ODBC Driver 17 for SQL Server};SERVER=你的服务器地址;DATABASE=你的数据库名;UID=用户名;PWD=密码"
    
    # 用with语句自动管理连接生命周期,不用手动关闭连接(类似.NET的using)
    with pyodbc.connect(conn_str) as conn:
        cursor = conn.cursor()
        # 一定要用参数化查询防止SQL注入!和.NET的参数化查询同样重要
        cursor.execute("SELECT id, name, email, phone FROM Customers WHERE id = ?", (customer_id,))
        
        # 获取单条记录
        row = cursor.fetchone()
        if not row:
            # 没找到记录时,返回None或者抛出异常,根据你的业务需求来
            return None
        
        # 把数据库行数据填充到Customer对象中
        return Customer(
            id=row.id,
            name=row.name,
            email=row.email,
            phone=row.phone
            # 其他字段对应查询结果里的列名即可
        )

3. 调用函数并使用对象

这一步和.NET的用法几乎一模一样:

# 读取ID为12345的客户记录
customer = ReadCustomerRecord(12345)

if customer:
    print(f"客户姓名:{customer.name},联系邮箱:{customer.email}")
    # 直接通过对象属性访问字段,和.NET完全一致
else:
    print("未找到该客户记录")

额外进阶小技巧

  • 如果你的Customer字段特别多,手动写每个属性映射太麻烦,可以用解包语法——只要查询结果的列顺序和Customer类的参数顺序完全一致,就能简化成:
    return Customer(*row)
    
  • 如果你习惯了.NET里的Entity Framework,Python里也有对应的ORM框架,比如SQLAlchemy,它能自动完成数据库表和Python类的映射,省去手动写SQL和对象填充的步骤,示例如下:
    from sqlalchemy import create_engine, Column, Integer, String
    from sqlalchemy.orm import declarative_base, sessionmaker
    
    Base = declarative_base()
    
    # 定义映射到数据库表的Customer类
    class Customer(Base):
        __tablename__ = 'Customers'
        id = Column(Integer, primary_key=True)
        name = Column(String)
        email = Column(String)
        phone = Column(String)
    
    # 创建数据库引擎和会话
    engine = create_engine("mssql+pyodbc://用户名:密码@服务器地址/数据库名?driver=ODBC+Driver+17+for+SQL+Server")
    Session = sessionmaker(bind=engine)
    
    def ReadCustomerRecord(customer_id: int) -> Customer:
        with Session() as session:
            # 直接通过类属性查询,完全不用写SQL
            return session.query(Customer).filter(Customer.id == customer_id).first()
    

内容的提问来源于stack exchange,提问作者biskit1967

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:53:43