提问人:Sgumbaza 提问时间:10/3/2023 更新时间:10/3/2023 访问量:43
如何使用FileMaker ODBC从CRM系统批量获取所有数据?
How to get all data in batches from CRM system using FileMaker ODBC?
问:
当我尝试使用 dsn 连接到 CRM 系统并尝试批量获取所有数据时,出现以下错误:
内核在当前单元格或上一个单元格中执行代码时崩溃。请查看单元格中的代码,以确定失败的可能原因。点击这里查看更多信息。查看 Jupyter 日志了解更多详细信息。
首先,我尝试测试代码是否正常工作,而无需尝试一次获取所有数据或不使用批处理。
我尝试使用以下代码进行测试,看看它是否可以工作,并且代码是否按我的预期工作:
import pandas as pd
import json
import requests
import pandas as pd
import pyodbc
from sqlalchemy import create_engine, inspect
import urllib.parse
import warnings
warnings.filterwarnings("ignore")
dsn = f"DSN={os.getenv('DSN')};UID={os.getenv('UID')};PWD={os.getenv('PWD')}"
try:
# Establish a connection to the FileMaker database
conn = pyodbc.connect(dsn)
conn.setdecoding(pyodbc.SQL_CHAR, encoding='latin1')
conn.setdecoding(pyodbc.SQL_WCHAR, encoding='latin1')
conn.setencoding(encoding='latin1')
# Query the table
query = "SELECT * FROM Sales_2022 FETCH FIRST 5 ROWS ONLY"
# Read data into a DataFrame
df = pd.read_sql(query, conn)
# Close the connection
conn.close()
# Print the DataFrame
print(df)
except pyodbc.Error as e:
print("Error:", e)
except Exception as e:
print("An unexpected error occurred:", e)
但是,当我想尝试使用下面的代码批量获取所有数据时,那就是内核崩溃的时候。我正在使用 python 3.9.5,安装的 RAM 为 16,0 GB(15,7 GB 可用),我也在使用 Windows 11 Pro。什么原因可能导致内核崩溃?
这是我尝试使用的代码:
import pandas as pd
import json
import requests
import pandas as pd
import pyodbc
from sqlalchemy import create_engine, inspect
import urllib.parse
import warnings
warnings.filterwarnings("ignore")
dsn = f"DSN={os.getenv('DSN')};UID={os.getenv('UID')};PWD={os.getenv('PWD')}"
conn = pyodbc.connect(dsn)
""" # Create an SQLAlchemy engine
engine = create_engine("mssql+pyodbc:///?odbc_connect=" + urllib.parse.quote_plus(dsn))
"""
conn.setdecoding(pyodbc.SQL_CHAR, encoding='latin1')
conn.setdecoding(pyodbc.SQL_WCHAR, encoding='latin1')
conn.setencoding(encoding='latin1')
chunk_size = 10000
offset = 0
data = []
while True:
query = f"""
SELECT * FROM Sales_2022
"""
chunk_df = pd.read_sql(query, conn)
# Check if there are no more records
if chunk_df.empty:
break
# Filter the chunk based on offset and chunk size
chunk_df = chunk_df[offset:offset+chunk_size]
# Append the chunk to the data list
data.append(chunk_df)
# Update the offset
offset += chunk_size
if data:
df = pd.concat(data, ignore_index=True)
else:
df = pd.DataFrame()
答: 暂无答案
评论