从 Python 连接到 SQLServer 的最简单方法是什么?

What is the easiest way to connect from Python to SQLServer?

提问人:Sajad Khan 提问时间:11/13/2023 更新时间:11/13/2023 访问量:34

问:

我正在尝试使用 python 连接到 **SQLServer **,并将 pandas 数据帧作为表放在它上面 并执行查询,我该怎么做? 例如,我希望能够从 Python 确定表的主键,并最大程度地减少对 SSMS 的需求。 如果此工具有助于记录数据库交互,那就太好了 我尝试过sqlalchemy,这是一个很好的工具,但是有更好的方法吗?

python sql-server sqlalchemy pyodbc

评论


答:

-1赞 Sajad Khan 11/13/2023 #1

所以我创建了它:) 它被命名为 pySqlServer,带有 github page:https://github.com/sajad-git/pySqlServer

一些使用技巧: 首先你可以使用 pip install pysqlserver 来安装它

用法

导入 PySQL 并Table_analyzer:

from pySqlServer import PySQL, Table_analyzer


Table_analyzer用法:

用于分析 Pandas DataFrame 以确定最佳 SQL 数据类型的帮助程序类。

df = pd.read_csv('test.csv')
TA = Table_analyzer()
dtype_dict = TA.analyze(df,texts_buffer=0.2)
  • 对于texts_buffer > 1:nvarchar(N) 中的 N 设置为 len_max_length + texts_buffer
  • 对于 0 < texts_buffer < 1:nvarchar(N) 中的 N 设置为 len_max_length + texts_buffer*len_max_length(额外百分比)


PySQL 用法:

  • 创建连接
pysql = PySQL()
pysql.create_connection(server='host_ip', database='mydb', username='myuser', password='mypassword', local_sql=False)

您的用户必须具有“db_datareader”、“db_datawriter”、“db_ddlAdmin”权限才能完美运行模块 对于本地 SQL Server 中的 Windows 身份验证,请设置 local_sql=True


  • 首次使用时(对于每个表),您必须调用 create_dtypes()
dtype_dict = {'col1':sql.sqltypes.INTEGER , 'col2':sql.sqltypes.NVARCHAR(100)} # it's suggested to use Table_analyzer to calculate optimal dtype_dict
# dtype_dict = TA.analyze(df,texts_buffer=0.2) 
pysql.create_dtypes(dtype_dict=dtype_dict, table_name='Test_table', schema='Test_schema')

  • 在下一个使用中,您必须调用 load_dtypes 接下来您可以使用to_sql方法发送数据
pysql.load_dtypes(table_name='Test_table', schema='Test_schema')    # created before
pysql.to_sql(df,'Test_table', schema='Test_schema', if_exists='append', text_cutter=True, date_normalizer=True, method='multi', verbos=True)
  • 您可以使用 primary_key='column_name' 来设置表格primary_key
  • 在下一次使用中,不允许使用此
  • “text_cutter”尝试剪切新文本(如果这些长度大于列容量)
  • “date_normalizer”尝试使日期格式列适合 SQL Server
  • method='multi' 用于在 INE 查询中插入多行
  • verbos=True -->显示数据传输的进度条(默认值:False)
  • 并且有一些读取数据方法可以从数据库中读取数据(返回 pandas DataFrame)
pysql.tables_list(schema=None)
pysql.read_sql_table(table_name, schema=None)
pysql.read_sql_query(query='SELECT * FROM TABLE_NAME')

  • 此外,您还可以使用update_key更新表,并update_value

这一行应该将表中名为 Bob Lookie 的人的年龄更新为 83 YO! 换句话说,您可以设置update_key,并使用字典列表update_value,它会在一行中更新所有查询(len(update_key) 应等于 len(update_value))

pysql.update_table(table_name='personal_data', schema='persons', update_key={'name':'Bob', 'last_name':'Looki'}, update_value={'age':83})

  • 记录器是一种常用的方法(它记录日期时间和process_id和actor_user,以使您的操作可跟踪)

每个to_sql调用都可以加入带有“process_id”列的日志,因此您可以找到开始存储数据的人员和时间以及处理数据所需的时间

pysql.logger('create_connection', 'success', 'connected')

评论

2赞 Klaus D. 11/13/2023
Stack Overflow 不是宣传您的项目的正确位置。