Это особый вопрос для процесса Python ETL, включающего панд и MS SQL-Server, с подключением sqlalchemy.
Если данные о продажах принимаются в виде числа с более чем двумя десятичными знаками (например, $ 1245,456), как его можно добавить в таблицу продаж, которая является типом данных VARCHAR. Столбец продаж является VARCHAR и не может быть изменен для другого типа данных.
my_sales_file.xlsx выглядит следующим образом:
Product | Sales
--------|--------
Apple | 1235.456
Banana | 567.54
Pear | 43.435
Peach | 432.32
Пример кода:
import pandas as pd
import sqlalchemy
from sqlalchemy.types import String
con_string = 'dummy_con_string'
engine = sqlalchemy.create_engine(con_string)
# read the file, force string datatype
df = pd.read_excel('my_sales_files.xlsx', dtype=str)
# round sales to a decimal value
df['Sales'] = df['Sales'].apply(lambda x: str(round(float(x), 2)))
# append to a ms sql table
df.to_sql(name='my_table',
con=engine,
if_exists='append',
dtype={'Sales': String})
SELECT SUM(CAST(Sales as float)
FROM my_table;
результаты отображаются в виде десятичного числа с последующими десятичными значениями.
Дополнительная проверка:
select * from my_table
where LEN(Sales)-CHARINDEX('.',sales) > 2 and CHARINDEX('.'sales) <> 0;
Я застрял с таблицей, которая принимает данные о продажах как VARCHAR, и мне нужно решение дляокругление и добавление беспорядочных продаж с python, так что все округления сохраняются.