TyperError:查询字典值必须是字符串或序列

发布于 2025-02-12 05:52:38 字数 1461 浏览 0 评论 0 原文

我以前仅使用PyodBC和Pandas接触到SQL Server来运行查询并将该信息保存到CSV文件中。使用此方法确实有效,但导致警告我觉得程序正在减慢程序。

我正在尝试实现Sqlachemy,但要获得上面的TypeError。

我从文档中读到:

import pyodbc
import pandas as pd
import numpy as np
from sqlalchemy.engine import URL
from sqlalchemy import create_engine

# Setting display options for the dataframe
pd.set_option('display.max_columns', None)
pd.set_option('max_colwidth', None)

# Turning each row from the main .csv file into a dataframe.
df = pd.read_csv(r'''C:\Users\username\Downloads\py_tma_tables.csv''')

# Turning the dataframe into a list.
tma_table = df['table_name'].tolist()

# Connection setup.
cnxn = pyodbc.connect('DSN=DB_NAME;Trusted_Connection=yes')
connection_url = URL.create("mssql+pyodbc", query={"odbc_connect": cnxn})
engine = create_engine(connection_url)

df_list = []
count = 0
while count < 1:
    df1 = pd.read_sql_query("SELECT * FROM " + tma_table[count], engine)
    df_list.append(df1)
    count += 1

df_count = 0
while df_count < len(df_list):
    for item in df_list:
        df_list[df_count].to_csv(tma_table[df_count] + ".csv", index=False, header=None, encoding='utf-8')
    df_count += 1

运行此返回:

TyperError: Query dictionary values must be strings or sequences of strings

I was previously using only pyodbc and pandas to reach out to a SQL Server to run a run a query and save that information into a csv file. Using this method does work but results in warnings that I feel was slowing down the program.

I'm trying to implement SQLAchemy but getting the TypeError above.

I read from the docs: SQLAlchemy 1.4 Documentation

import pyodbc
import pandas as pd
import numpy as np
from sqlalchemy.engine import URL
from sqlalchemy import create_engine

# Setting display options for the dataframe
pd.set_option('display.max_columns', None)
pd.set_option('max_colwidth', None)

# Turning each row from the main .csv file into a dataframe.
df = pd.read_csv(r'''C:\Users\username\Downloads\py_tma_tables.csv''')

# Turning the dataframe into a list.
tma_table = df['table_name'].tolist()

# Connection setup.
cnxn = pyodbc.connect('DSN=DB_NAME;Trusted_Connection=yes')
connection_url = URL.create("mssql+pyodbc", query={"odbc_connect": cnxn})
engine = create_engine(connection_url)

df_list = []
count = 0
while count < 1:
    df1 = pd.read_sql_query("SELECT * FROM " + tma_table[count], engine)
    df_list.append(df1)
    count += 1

df_count = 0
while df_count < len(df_list):
    for item in df_list:
        df_list[df_count].to_csv(tma_table[df_count] + ".csv", index=False, header=None, encoding='utf-8')
    df_count += 1

Running this returns:

TyperError: Query dictionary values must be strings or sequences of strings

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

久伴你 2025-02-19 05:52:38

找到了一个解决方案:

servername = 'server'
dbname = 'database'
sqlcon = create_engine('mssql+pyodbc://@' + servername + '/' + dbname + '?driver=ODBC+Driver+17+for+SQL+Server')

然后能够插入 sqlcon in:

df_list = []
count = 0
while count < 1:
    df1 = pd.read_sql_query("SELECT * FROM " + tma_table[count], sqlcon)
    df_list.append(df1)
    count += 1

Found a solution:

servername = 'server'
dbname = 'database'
sqlcon = create_engine('mssql+pyodbc://@' + servername + '/' + dbname + '?driver=ODBC+Driver+17+for+SQL+Server')

Was then able to plug sqlcon in:

df_list = []
count = 0
while count < 1:
    df1 = pd.read_sql_query("SELECT * FROM " + tma_table[count], sqlcon)
    df_list.append(df1)
    count += 1
怪我鬧 2025-02-19 05:52:38
cnxn = pyodbc.connect('DSN=DB_NAME;Trusted_Connection=yes')
connection_url = URL.create("mssql+pyodbc", query={"odbc_connect": cnxn})

您正在尝试在 query = dict中传递PYODBC连接对象。您需要传递连接字符串

connection_string = "DSN=DB_NAME;Trusted_Connection=yes"
connection_url = URL.create("mssql+pyodbc", query={"odbc_connect": connection_string})
cnxn = pyodbc.connect('DSN=DB_NAME;Trusted_Connection=yes')
connection_url = URL.create("mssql+pyodbc", query={"odbc_connect": cnxn})

You are trying to pass a pyodbc Connection object in the query= dict. You need to pass the connection string:

connection_string = "DSN=DB_NAME;Trusted_Connection=yes"
connection_url = URL.create("mssql+pyodbc", query={"odbc_connect": connection_string})
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文