DataFrameOperations Classe
Namespace para operações dataFrame CRUD de pandas.
Acedido via client.dataframe. Fornece wrappers orientados a DataFrame para as operações CRUD ao nível de registo.
Example:
import pandas as pd
client = DataverseClient(base_url, credential)
# Query records as a DataFrame
df = client.dataframe.get("account", select=["name"], top=100)
# Create records from a DataFrame
new_df = pd.DataFrame([{"name": "Contoso"}, {"name": "Fabrikam"}])
new_df["accountid"] = client.dataframe.create("account", new_df)
# Update records
new_df["telephone1"] = ["555-0100", "555-0200"]
client.dataframe.update("account", new_df, id_column="accountid")
# Delete records
client.dataframe.delete("account", new_df["accountid"])
Construtor
DataFrameOperations(client: DataverseClient)
Parâmetros
| Name | Description |
|---|---|
|
client
Necessário
|
A instância principal DataverseClient . |
Métodos
| create |
Criar registos a partir de um DataFrame pandas. Gorjeta Todas as linhas são enviadas num único pedido CreateMultiplex. Por muito DataFrames grandes, considere dividir em lotes mais pequenos para evitar Peça tempos mortos. |
| delete |
Apague registos passando uma série de GUIDs pandas. |
| get |
Obtém registos e retornam como um único DataFrame pandas. Quando Gorjeta Para tabelas grandes, use topo ou filtro para limitar o conjunto de resultados. |
| sql |
Execute uma consulta SQL e devolve os resultados como um DataFrame pandas. Delega para sql e converte a lista de registos num único DataFrame. |
| update |
Atualizar registos a partir de um DataFrame pandas. Cada linha no DataFrame representa uma atualização. Especifica Gorjeta Todas as linhas são enviadas num único pedido UpdateMultiple (ou num um único PATCH para uma linha). Para DataFrames muito grandes, considere Dividir em lotes mais pequenos para evitar tempos de espera dos pedidos. |
create
Criar registos a partir de um DataFrame pandas.
Gorjeta
Todas as linhas são enviadas num único pedido CreateMultiplex. Por muito
DataFrames grandes, considere dividir em lotes mais pequenos para evitar
Peça tempos mortos.
create(table: str, records: DataFrame) -> Series
Parâmetros
| Name | Description |
|---|---|
|
table
Necessário
|
Nome do esquema da tabela (por exemplo, |
|
records
Necessário
|
DataFrame onde cada linha é um registo a criar. |
Devoluções
| Tipo | Description |
|---|---|
|
Série de GUIDs de registo criados, alinhados com o índice DataFrame de entrada. |
Exceções
| Tipo | Description |
|---|---|
|
Se |
|
|
Se |
Exemplos
Criar registos a partir de um DataFrame:
import pandas as pd
df = pd.DataFrame([
{"name": "Contoso", "telephone1": "555-0100"},
{"name": "Fabrikam", "telephone1": "555-0200"},
])
df["accountid"] = client.dataframe.create("account", df)
delete
Apague registos passando uma série de GUIDs pandas.
delete(table: str, ids: Series, use_bulk_delete: bool = True) -> str | None
Parâmetros
| Name | Description |
|---|---|
|
table
Necessário
|
Nome do esquema da tabela (por exemplo, |
|
ids
Necessário
|
Série de GUIDs de registo para eliminar. |
|
use_bulk_delete
|
Quando Default value: True
|
Devoluções
| Tipo | Description |
|---|---|
|
str,
|
ID de trabalho BulkDelete ao eliminar múltiplos registos via BulkDelete; |
Exceções
| Tipo | Description |
|---|---|
|
Se |
|
|
Se |
Exemplos
Apagar registos usando uma Série:
import pandas as pd
ids = pd.Series(["guid-1", "guid-2", "guid-3"])
client.dataframe.delete("account", ids)
get
Obtém registos e retornam como um único DataFrame pandas.
Quando record_id é fornecido, devolve um DataFrame de uma única linha.
Quando record_id é Nenhum, itera internamente todas as páginas e retorna um DataFrame consolidado.
Gorjeta
Para tabelas grandes, use topo ou filtro para limitar o conjunto de resultados.
get(table: str, record_id: str | None = None, select: List[str] | None = None, filter: str | None = None, orderby: List[str] | None = None, top: int | None = None, expand: List[str] | None = None, page_size: int | None = None, count: bool = False, include_annotations: str | None = None) -> DataFrame
Parâmetros
| Name | Description |
|---|---|
|
table
Necessário
|
Nome do esquema da tabela (por exemplo, |
|
record_id
|
GUID opcional para obter um registo específico. Se não houver, consulta múltiplos registos. Default value: None
|
|
select
|
Lista opcional de nomes lógicos de atributos a recuperar. Default value: None
|
|
filter
|
Cadeia opcional de filtro OData. Os nomes das colunas devem usar nomes lógicos minúsculos exatos. Default value: None
|
|
orderby
|
Lista opcional de atributos para ordenar. Default value: None
|
|
top
|
Número máximo opcional de registos a devolver. Default value: None
|
|
expand
|
Lista opcional de propriedades de navegação a expandir (distinção de maiúsculas e minúsculas). Default value: None
|
|
page_size
|
Número opcional de registos por página para paginação. Default value: None
|
|
count
|
Se Default value: False
|
|
include_annotations
|
Padrão de anotação OData para o Default value: None
|
Devoluções
| Tipo | Description |
|---|---|
|
DataFrame contendo todos os registos correspondentes. Devolve um DataFrame vazio quando nenhum registo corresponde. |
Exceções
| Tipo | Description |
|---|---|
|
Se |
Exemplos
Buscar um único registo como DataFrame:
df = client.dataframe.get("account", record_id=account_id, select=["name", "telephone1"])
print(df)
Consulta com filtragem:
df = client.dataframe.get("account", filter="statecode eq 0", select=["name"])
print(f"Got {len(df)} active accounts")
Tamanho limite do resultado:
df = client.dataframe.get("account", select=["name"], top=100)
sql
Execute uma consulta SQL e devolve os resultados como um DataFrame pandas.
Delega para sql e converte a lista de registos num único DataFrame.
sql(sql: str) -> DataFrame
Parâmetros
| Name | Description |
|---|---|
|
sql
Necessário
|
Instrução SQL SELECT suportada. |
Devoluções
| Tipo | Description |
|---|---|
|
DataFrame contendo todas as linhas de resultados. Devolve um DataFrame vazio quando nenhuma linha corresponde. |
Exceções
| Tipo | Description |
|---|---|
|
Se |
Exemplos
Consulta SQL para DataFrame:
df = client.dataframe.sql(
"SELECT TOP 100 name, revenue FROM account "
"WHERE statecode = 0 ORDER BY revenue"
)
print(f"Got {len(df)} rows")
print(df.head())
Consulta agregada para DataFrame:
df = client.dataframe.sql(
"SELECT a.name, COUNT(c.contactid) as cnt "
"FROM account a "
"JOIN contact c ON a.accountid = c.parentcustomerid "
"GROUP BY a.name"
)
update
Atualizar registos a partir de um DataFrame pandas.
Cada linha no DataFrame representa uma atualização. Especifica id_column qual coluna contém os GUIDs dos registos.
Gorjeta
Todas as linhas são enviadas num único pedido UpdateMultiple (ou num
um único PATCH para uma linha). Para DataFrames muito grandes, considere
Dividir em lotes mais pequenos para evitar tempos de espera dos pedidos.
update(table: str, changes: DataFrame, id_column: str, clear_nulls: bool = False) -> None
Parâmetros
| Name | Description |
|---|---|
|
table
Necessário
|
Nome do esquema da tabela (por exemplo, |
|
changes
Necessário
|
DataFrame onde cada linha contém um registo GUID e os campos a atualizar. |
|
id_column
Necessário
|
Nome da coluna DataFrame que contém os GUIDs de registo. |
|
clear_nulls
|
Quando Default value: False
|
Exceções
| Tipo | Description |
|---|---|
|
Se |
|
|
Se for vazio, |
Exemplos
Atualizar registos com valores diferentes por linha:
import pandas as pd
df = pd.DataFrame([
{"accountid": "guid-1", "telephone1": "555-0100"},
{"accountid": "guid-2", "telephone1": "555-0200"},
])
client.dataframe.update("account", df, id_column="accountid")
Transmitir a mesma alteração para todos os discos:
df = pd.DataFrame({"accountid": ["guid-1", "guid-2", "guid-3"]})
df["websiteurl"] = "https://example.com"
client.dataframe.update("account", df, id_column="accountid")
Limpar um campo definindo clear_nulls=Verdadeiro:
df = pd.DataFrame([{"accountid": "guid-1", "websiteurl": None}])
client.dataframe.update("account", df, id_column="accountid", clear_nulls=True)