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

问题描述 投票:0回答:1

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

python sql-server sqlalchemy pyodbc
1个回答
0
投票

所以我创建了它:) 它被命名为 pySqlServer,并带有 github 页面: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 : N in nvarchar(N) sets to len_max_length + texts_buffer*len_max_length (extra percentage)


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 数据帧)
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})

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

每个 to_sql 调用都可以与带有“process_id”列的日志连接,这样您就可以找到谁、何时开始存储数据以及处理需要多长时间

pysql.logger('create_connection', 'success', 'connected')
© www.soinside.com 2019 - 2024. All rights reserved.