如何使用 Python 将查询导出到 excel?
How to export a query to excel using Python?
我一直在尝试循环遍历列表作为数据库查询的参数,并将其转换为 xlsx 格式,使用 pyodbc、pandas、xlsxwriter 模块。
然而,尽管经过反复试验,以下消息仍不断出现:
要执行的第一个参数必须是字符串或 unicode 查询。
这可能与查询本身或模块有关 'pandas'?
谢谢。
这是为了使用 pandas 和 pyodbc 将查询结果导出到 excel 电子表格,python 3.7 ver.
import pyodbc
import pandas as pd
#Database Connection
conn = pyodbc.connect(driver='xxxxxx', server='xxxxxxx', database='xxxxxx',
user='xxxxxx', password='xxxxxxxx')
cursor = conn.cursor()
depts = ['Human Resources','Accounting','Marketing']
query = """
SELECT *
FROM device ID
WHERE
Department like ?
AND
Status like 'Active'
"""
target = r'O:\Example'
today = target + os.sep + time.strftime('%Y%m%d')
if not os.path.exists(today):
os.mkdir(today)
for i in departments:
cursor.execute(query, i)
#workbook = Workbook(today + os.sep + i + 'xlsx')
#worksheet = workbook.add_worksheet()
data = cursor.fetchall()
P_data = pd.read_sql(data, conn)
P_data.to_excel(today + os.sep + i + 'xlsx')
当您使用 pandas.read_sql() 将数据读入数据帧时,pandas 期望第一个参数是要执行的查询(以字符串格式),不是查询结果。
代替你的台词:
P_data = pd.read_sql(data, conn)
您想使用:
P_data = pd.read_sql(query, conn)
要过滤掉部门,您需要将列表序列化为 SQL 语法字符串:
depts = ['Human Resources','Accounting','Marketing']
# gives you the string to use in your sql query:
depts_query_string = "('{query_vals}')".format(query_vals="','".join(depts))
要在查询中使用新的 SQL 字符串,请使用 str.format:
query = """
SELECT *
FROM device ID
WHERE
Department in {query_vals}
AND
Status like 'Active'
""".format(query_vals=depts_query_string)
现在一起:
import pyodbc
import pandas as pd
#Database Connection
conn = pyodbc.connect(driver='xxxxxx', server='xxxxxxx', database='xxxxxx',
user='xxxxxx', password='xxxxxxxx')
cursor = conn.cursor()
depts = ['Human Resources','Accounting','Marketing']
# gives you the string to use in your sql query:
depts_query_string = "('{query_vals}')".format(query_vals="','".join(depts))
query = """
SELECT *
FROM device ID
WHERE
Department in {query_vals}
AND
Status like 'Active'
""".format(query_vals=depts_query_string)
target = r'O:\Example'
today = target + os.sep + time.strftime('%Y%m%d')
if not os.path.exists(today):
os.mkdir(today)
for i in departments:
#workbook = Workbook(today + os.sep + i + 'xlsx')
#worksheet = workbook.add_worksheet()
P_data = pd.read_sql(query, conn)
P_data.to_excel(today + os.sep + i + 'xlsx')
对查询进行排序后,您可以使用以下命令直接加载到数据框中。
P_data = pd.read_sql_query(query, conn)
P_data.to_excel('desired_filename.format')
我一直在尝试循环遍历列表作为数据库查询的参数,并将其转换为 xlsx 格式,使用 pyodbc、pandas、xlsxwriter 模块。
然而,尽管经过反复试验,以下消息仍不断出现: 要执行的第一个参数必须是字符串或 unicode 查询。
这可能与查询本身或模块有关 'pandas'?
谢谢。
这是为了使用 pandas 和 pyodbc 将查询结果导出到 excel 电子表格,python 3.7 ver.
import pyodbc
import pandas as pd
#Database Connection
conn = pyodbc.connect(driver='xxxxxx', server='xxxxxxx', database='xxxxxx',
user='xxxxxx', password='xxxxxxxx')
cursor = conn.cursor()
depts = ['Human Resources','Accounting','Marketing']
query = """
SELECT *
FROM device ID
WHERE
Department like ?
AND
Status like 'Active'
"""
target = r'O:\Example'
today = target + os.sep + time.strftime('%Y%m%d')
if not os.path.exists(today):
os.mkdir(today)
for i in departments:
cursor.execute(query, i)
#workbook = Workbook(today + os.sep + i + 'xlsx')
#worksheet = workbook.add_worksheet()
data = cursor.fetchall()
P_data = pd.read_sql(data, conn)
P_data.to_excel(today + os.sep + i + 'xlsx')
当您使用 pandas.read_sql() 将数据读入数据帧时,pandas 期望第一个参数是要执行的查询(以字符串格式),不是查询结果。
代替你的台词:
P_data = pd.read_sql(data, conn)
您想使用:
P_data = pd.read_sql(query, conn)
要过滤掉部门,您需要将列表序列化为 SQL 语法字符串:
depts = ['Human Resources','Accounting','Marketing']
# gives you the string to use in your sql query:
depts_query_string = "('{query_vals}')".format(query_vals="','".join(depts))
要在查询中使用新的 SQL 字符串,请使用 str.format:
query = """
SELECT *
FROM device ID
WHERE
Department in {query_vals}
AND
Status like 'Active'
""".format(query_vals=depts_query_string)
现在一起:
import pyodbc
import pandas as pd
#Database Connection
conn = pyodbc.connect(driver='xxxxxx', server='xxxxxxx', database='xxxxxx',
user='xxxxxx', password='xxxxxxxx')
cursor = conn.cursor()
depts = ['Human Resources','Accounting','Marketing']
# gives you the string to use in your sql query:
depts_query_string = "('{query_vals}')".format(query_vals="','".join(depts))
query = """
SELECT *
FROM device ID
WHERE
Department in {query_vals}
AND
Status like 'Active'
""".format(query_vals=depts_query_string)
target = r'O:\Example'
today = target + os.sep + time.strftime('%Y%m%d')
if not os.path.exists(today):
os.mkdir(today)
for i in departments:
#workbook = Workbook(today + os.sep + i + 'xlsx')
#worksheet = workbook.add_worksheet()
P_data = pd.read_sql(query, conn)
P_data.to_excel(today + os.sep + i + 'xlsx')
对查询进行排序后,您可以使用以下命令直接加载到数据框中。
P_data = pd.read_sql_query(query, conn)
P_data.to_excel('desired_filename.format')