我有这个伟大的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数据框放到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) 基本上,我试图更新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) 我正在尝试将以下列表传递给sql查询
x = ['1000000000164774783','1000000000253252111']
Run Code Online (Sandbox Code Playgroud)
我正在使用sqlalchemy和pyodbc连接到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 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) 我正在制作一个discord bot,其中一个命令涉及从SQL表中提取数据,为此我使用的是AioOdbc模块,它与Pyodbc几乎完全相同,唯一真正的区别在于它没有' t阻塞异步函数.
以这种格式输出哪些.
[('Item1',),('Item2',)]
Run Code Online (Sandbox Code Playgroud)
我怎样才能输出一些更好看的内容?可能是类似的东西
Item1, Item2
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏!
我使用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)
我的问题是,在实际使用它来读取或写入数据之前,是否有一种简单的方法可以检查引擎的连接/状态.什么是最简单的方法?
行计数如何工作。我正在使用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在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。我在DB_Connect.py文件中运行以下命令。我从CMD行运行python DB_Connect.py,它在上给出错误import pyodbc。
然后,我运行命令,pip install pyodbc但显示错误消息:“需要Microsoft Visual C ++ 14.0”。我安装了“ Microsoft Visual C ++ 2015可再发行组件”来解决这个问题,因为我需要获得完整版本的许可证。我的理解是,这将起作用。我仍然收到此错误:
我需要安装完整版本的Visual C ++还是免费的选项?为什么此CMD无法与可再发行版本一起使用?我该如何走过这一步?
PC:Windows 7 Pro-64 Python版本:3.7.0
pyodbc ×10
python ×9
sql-server ×5
python-3.x ×3
pandas ×2
sqlalchemy ×2
discord ×1
discord.py ×1
ms-access ×1
numpy ×1
orm ×1
python-2.7 ×1
sql ×1