【问题标题】:Insert data in sql server with python用python在sql server中插入数据
【发布时间】:2019-07-30 08:19:00
【问题描述】:

我想用 python 将数据从树莓派插入到 sql server 中。 我尝试使用 pypyodbc 但它无法正常工作。 你能指导我使用女巫模块吗?

import pyodbc 
conn = pyodbc.connect(
                     'DRIVER={SQL Server Native Client 11.0};'
                     'SERVER=server;'
                     'Integrated_Security=false;'
                     'Trusted_Connection=no;'
                     'UID=pi;'
                     'PWD=pi;'
                     'DATABASE= database'
                 )
cursor = conn.cursor()
cursor.execute('SELECT * FROM database.table')

for row in cursor:
    print(row)

yodbc.InterfaceError: ('28000', '[28000] [Microsoft][SQL Server Native Client 11.0][SQL Server]用户\'pi\'登录失败。(18456) (SQLDriverConnect); [28000] [Microsoft][SQL Server Native Client 11.0][SQL Server]无法打开登录请求的数据库“数据库”。登录失败。(4060); [28000] [Microsoft][SQL Server Native Client 11.0]无效的连接字符串属性(0);[28000][Microsoft][SQL Server Native Client 11.0][SQL Server]用户\'pi\'登录失败。(18456);[28000][Microsoft][SQL Server Native Client 11.0][SQL服务器]无法打开登录请求的数据库“数据库”。登录失败。(4060);[28000][Microsoft][SQL Server Native Client 11.0]无效的连接字符串属性(0)')

【问题讨论】:

  • 确保在sql server area configuration 中启用了通过 tcp/ip 和命名管道的连接。
  • @ManishMishra 我设置了 sql server 。我可以使用我设置的 sql 凭据从同事计算机连接。从外部可以看到服务器,从服务器端看起来一切都很好。我遇到的问题是我无法通过 python 从 pi 连接。
  • 好吧,您粘贴的问题,即Login failed for user \'pi\',说明访问有问题。检查您是否可以通过相同的凭据通过管理工作室登录,如果可以,那么它肯定是命名管道访问。还要确保重新启动您的实例服务以进行任何更改
  • 我看到server 是服务器,数据库是database。这些是正确的吗?无论如何,删除database 文本之前的空格。检查您是否能够直接通过 SQL Server 客户端使用此连接详细信息登录。
  • @ManishMishra 我可以通过 ..**.**\SQLEXPRESS 在 ssms 上使用您觉得不错的凭据进行连接?跨度>

标签: python sql sql-server python-3.x pypyodbc


【解决方案1】:

所以一位同事刚刚经过我并告诉我将所有数据放在 '' 之间只在 1 行 我还删除了 'Integrated_Security=false;'Trusted_Connection=no;正如有人告诉我的那样

工作代码

something='something'
import pyodbc 
conn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=srv;DATABASE=datavase;UID=pi;PWD=pass')
cursor = conn.cursor()
cursor.execute("insert into test values (?, 'awesome library ')",var)
cursor.execute('SELECT * FROM test')
for row in cursor:
    print(row)

【讨论】:

    【解决方案2】:

    我强烈推荐使用 sqlite3

    import sqlite3
    conn = sqlite3.connect(
                          'DRIVER={SQL Server Native Client 11.0};'
                          'SERVER=server;'
                          'Integrated_Security=false;'
                          'Trusted_Connection=no;'
                          'UID=pi;'
                          'PWD=pi;'
                          'DATABASE= database'
                      )
    cursor = conn.cursor()
    cursor.execute('SELECT * FROM database.table')
    
    for row in cursor:
        print(row)
    

    【讨论】:

    • 问题是关于使用sql server。而不是what db server would you recommend?
    • 如果网络中断,我使用 sqlite3 作为备份。我希望能够直接写入数据库,以防网络中断以写入本地 .db
    猜你喜欢
    • 2020-02-10
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多