标签: pyodbc

有没有办法使用pyodbc将scope_identity()插入sql server 2005

我有这个伟大的pyodbc lib.我尝试下面的代码,它应该插入一行并返回行ID但它不起作用.顺便说一句,我在服务器上使用sql server 2005,客户端是windows os

...
con = pyodbc.connect('conectionString', autocommit = True)
cur = con.execute(
                  "insert into sometable values('something');
                  select scope_identity() as id"
                  )
for id in cur:
   print id
...
Run Code Online (Sandbox Code Playgroud)

一些想法?

python sql-server pyodbc

2
推荐指数
1
解决办法
2031
查看次数

将python(pandas)数据框写入SQL数据库错误

我试图将一个python数据框放到MS SQL DB,我收到以下错误

功能

def put_to_server(df):       # df is a pandas data frame
   server="KORNBSVM04\MSSQLSERVER2012"
   Driver="{SQL Server}"
   userid=''
   pswd=''
   cnxn = pyodbc.connect(driver=Driver, server=server, database="CIHOTLINE",uid=userid, pwd=pswd)
   cur=cnxn.cursor()
   df.to_sql(name='dbo.test',con=cnxn)
Run Code Online (Sandbox Code Playgroud)

错误

 File "C:\Python27\lib\site-packages\pandas\core\generic.py", line 950, in to_sql
index_label=index_label)
File "C:\Python27\lib\site-packages\pandas\io\sql.py", line 475, in to_sql
index_label=index_label)
File "C:\Python27\lib\site-packages\pandas\io\sql.py", line 1084, in to_sql
index_label=index_label)
File "C:\Python27\lib\site-packages\pandas\io\sql.py", line 543, in __init__
if self.pd_sql.has_table(self.name):
File "C:\Python27\lib\site-packages\pandas\io\sql.py", line 1094, in has_table
return len(self.execute(query).fetchall()) > 0
File "C:\Python27\lib\site-packages\pandas\io\sql.py", line 1041, in execute
raise_with_traceback(ex)
File "C:\Python27\lib\site-packages\pandas\io\sql.py", line 1030, in execute
cur.execute(*args) …
Run Code Online (Sandbox Code Playgroud)

python sql sql-server pyodbc pandas

2
推荐指数
1
解决办法
2万
查看次数

Pyodbc没有更新表

基本上,我试图更新Table1中的Column1_mbgl字段数据,这些数据均基于MS Access数据库。该脚本被执行而没有任何错误,但是在检查表时没有发生更新。我尝试了代码中所示的两个选项,但均未成功。第二个选项是直接从MS Access查询生成的SQL代码。有人可以建议我在代码中缺少什么吗?

#import pypyodbc
import pyodbc

# MS ACCESS DB CONNECTION
pyodbc.lowercase = False
conn = pyodbc.connect(
    r"Driver={Microsoft Access Driver (*.mdb, *.accdb)};" +
    r"Dbq=C:\temp\DB_access.accdb;")

# OPEN CURSOR AND EXECUTE SQL
cur = conn.cursor()

# Option 1 - no error and no update
cur.execute("UPDATE Table1 SET Column1_mbGL = Column2_mbGL-0.3 WHERE ((Column3_name='PZ01') AND (DateTime Between #6/14/2016 14:0:0# AND #6/16/2016 12:0:0#) AND (TYPE='LOG'))");

# Option 2 - no error and no update
#cur.execute("UPDATE Table1 SET Table1.Column1_mbGL = [Table1]![Column2_mbGL]-0.3 WHERE (((Table1.Column3_name)='PZ01') AND ((Table1.DateTime) …
Run Code Online (Sandbox Code Playgroud)

python ms-access pyodbc

2
推荐指数
1
解决办法
1506
查看次数

将值列表从Python传递到SQL查询的IN子句

我正在尝试将以下列表传递给sql查询

x = ['1000000000164774783','1000000000253252111']
Run Code Online (Sandbox Code Playgroud)

我正在使用sqlalchemypyodbc连接到sql:

import pandas as pd
from pandas import Series,DataFrame
import pyodbc
import sqlalchemy

cnx=sqlalchemy.create_engine("mssql+pyodbc://Omnius:MainBrain1@172.31.163.135:1433/Basis?driver=/opt/microsoft/sqlncli/lib64/libsqlncli-11.0.so.1790.0")
Run Code Online (Sandbox Code Playgroud)

我尝试使用各种字符串格式函数在sql查询中使用。下面是其中之一

  xx = ', '.join(x)
  sql = "select * from Pretty_Txns where Send_Customer in (%s)" % xx
  df = pd.read_sql(sql,cnx)
Run Code Online (Sandbox Code Playgroud)

他们似乎都将其转换为数字格式

(1000000000164774783, 1000000000253252111) instead of ('1000000000164774783','1000000000253252111')
Run Code Online (Sandbox Code Playgroud)

因此查询失败,因为SQL 中Send_Customer的数据类型为varchar(50)

 ProgrammingError: (pyodbc.ProgrammingError) ('42000', '[42000] [Microsoft][SQL Server Native Client 11.0]
  [SQL Server]Error converting data type varchar to numeric. (8114) (SQLExecDirectW)') 
 [SQL: 'select * from Pretty_Txns where Send_Customer in (1000000000164774783, 1000000000253252111)']
Run Code Online (Sandbox Code Playgroud)

python sql-server sqlalchemy pyodbc

2
推荐指数
1
解决办法
3574
查看次数

pyodbc :(“参数必须在列表,元组或行中”,“ HY000”)和NumPy数据

我正在尝试使用Python 3通过pyodbc将元组列表插入MS SQL表。

conn_string = (('DRIVER=FreeTDS;'
                'SERVER={};'
                'PORT=1433;'
                'DATABASE={};'
                'UID={};'
                'PWD={};'
                'TDS_Version=8.0;')
               .format(server, db, user, pwd))
sql = """
insert into Table1(field1, field2, field3) values (?, ?, ?)
"""

cursor.executemany(sql, [('1175B57E-7A10-4BAC-B22E-457C8266C0F2', '1D111FA5-A65D-4F77-A3AB-78B80BAF0C0B', 2),
 ('C60FA1C9-7656-4EBF-A577-44CBF0C641F4', '365FB706-9F7F-4ED4-AB88-927AE1F762A6', 1),
 ('2DF071CE-ABDF-4119-9573-2B0CA2B99C9C', '590E266D-810C-4DC2-BA5A-BAC05A9982C4', 0),
 ('EB794EF9-5FF4-49D3-B81E-F14F69C09306', '1D6E0C95-DF96-45D5-B8F3-211D825A160F', 0),
 ('EB794EF9-5FF4-49D3-B81E-F14F69C09306', '17D2EC66-845F-495D-9020-91E144B2E595', 0),
 ('EB794EF9-5FF4-49D3-B81E-F14F69C09306', '3A694B33-39F4-4F5B-899B-9B27810E4D82', 1),
 ('2DF071CE-ABDF-4119-9573-2B0CA2B99C9C', '4EE1D6F4-4A1E-4316-93D5-2AE1F461A193', 0),
 ('410DE087-1ADF-4EEA-BCE6-D7A1124E2A51', '17D2EC66-845F-495D-9020-91E144B2E595', 0),
 ('C60FA1C9-7656-4EBF-A577-44CBF0C641F4', '250256D4-4A3A-48E0-BCBA-7CD89011D81F', 1),
 ('2DF071CE-ABDF-4119-9573-2B0CA2B99C9C', '4D363718-FE0C-4257-8E4C-5C9A024BAEFF', 0)])
Run Code Online (Sandbox Code Playgroud)

但这不是:

params = list(row for row in data_table.round(0).head(10).to_records(index=False))

cursor.executemany(sql, params)
Run Code Online (Sandbox Code Playgroud)

产生此错误:

('Params must be in a list, tuple, or Row', …
Run Code Online (Sandbox Code Playgroud)

python numpy pyodbc pandas

2
推荐指数
1
解决办法
3590
查看次数

如何让pyodbc输出更具可读性/更好?

我正在制作一个discord bot,其中一个命令涉及从SQL表中提取数据,为此我使用的是AioOdbc模块,它与Pyodbc几乎完全相同,唯一真正的区别在于它没有' t阻塞异步函数.

以这种格式输出哪些.

[('Item1',),('Item2',)]
Run Code Online (Sandbox Code Playgroud)

我怎样才能输出一些更好看的内容?可能是类似的东西

Item1, Item2
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏!

python pyodbc python-3.x discord discord.py

2
推荐指数
1
解决办法
103
查看次数

SQL Alchemy检查连接

我使用SQL Alchemy和Pyodbc创建了以下方法来连接到SQL Server.

def getDBEngine(server, database):
    Params = urllib.quote_plus("DRIVER={SQL Server};SERVER="+server+";DATABASE="+database+";TRUSTED_CONNECTION=Yes")
    Engine = sa.create_engine("mssql+pyodbc:///?odbc_connect=%s" % Params)

    return Engine
Run Code Online (Sandbox Code Playgroud)

然后,我可以使用该引擎通过pandas中的to_sql等方法读取和写入数据.

def toSQL(Server, Database, Tablename):
    writeEngine= getDatabaseEngine(Server, Database)
    data.to_sql('write_Tablename',writeEngine,if_exists='append')
Run Code Online (Sandbox Code Playgroud)

我的问题是,在实际使用它来读取或写入数据之前,是否有一种简单的方法可以检查引擎的连接/状态.什么是最简单的方法?

sql-server orm sqlalchemy pyodbc python-2.7

2
推荐指数
1
解决办法
2619
查看次数

pyodbc rowcount仅返回-1

行计数如何工作。我正在使用pyodbc,并且始终返回-1。

 return_query = conn.query_db_param(query, q_params)
 print(return_query.rowcount)

 def query_db_param(self, query, params):
     self.cursor.execute(query,params)
     print(self.cursor.rowcount)
Run Code Online (Sandbox Code Playgroud)

python pyodbc python-3.x

2
推荐指数
2
解决办法
3938
查看次数

Python的多行UPSERT(INSERT或UPDATE)

我目前正在使用python实现下面的简单查询,使用pyodbc在SQL服务器表中插入数据:

import pyodbc

table_name = 'my_table'
insert_values = [(1,2,3),(2,2,4),(3,4,5)]

cnxn = pyodbc.connect(...)
cursor = cnxn.cursor()
cursor.execute(
    ' '.join([
        'insert into',
        table_name,
        'values',
        ','.join(
            [str(i) for i in insert_values]
        )
    ])
)
cursor.commit()
Run Code Online (Sandbox Code Playgroud)

只要没有重复键(假设第一列包含键),这应该可以工作.但是对于具有重复键的数据(表中已存在数据),将引发错误.如何使用pyodbc一次性在SQL服务器表中插入多行,以便只更新具有重复键的数据.

注意:针对单行数据提出了解决方案,但是,我想一次插入多行(避免循环)!

python sql-server pyodbc

2
推荐指数
3
解决办法
2138
查看次数

在Windows上为Python 3.7安装Pyodbc

我是python的新手,我需要连接到SQL Server。我在DB_Connect.py文件中运行以下命令。我从CMD行运行python DB_Connect.py,它在上给出错误import pyodbc

错误图片

然后,我运行命令,pip install pyodbc但显示错误消息:“需要Microsoft Visual C ++ 14.0”。我安装了“ Microsoft Visual C ++ 2015可再发行组件”来解决这个问题,因为我需要获得完整版本的许可证。我的理解是,这将起作用。我仍然收到此错误:

Pip安装Pyodbc err的图片

我需要安装完整版本的Visual C ++还是免费的选项?为什么此CMD无法与可再发行版本一起使用?我该如何走过这一步?

PC:Windows 7 Pro-64 Python版本:3.7.0

python pyodbc python-3.x

2
推荐指数
1
解决办法
5628
查看次数