小编Gor*_*son的帖子

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 不执行许多优化插入?

我正在使用连接器/Python 将多行插入到 mysql 的临时表中。这些行都在一个列表列表中。我像这样执行插入:

cursor = connection.cursor();
batch = [[1, 'foo', 'bar'],[2, 'xyz', 'baz']]
cursor.executemany('INSERT INTO temp VALUES(?, ?, ?)', batch)
connection.commit()
Run Code Online (Sandbox Code Playgroud)

我注意到(当然还有更多的行)性能非常差。使用 SHOW PROCESSLIST,我注意到每个插入都是单独执行的。但是文档https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-executemany.html说这应该优化为 1 个插入。这是怎么回事?

python mysql connector executemany mysql-connector-python

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

将值列表从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
查看次数

在Python 3中使用Pyodbc自动检测ODBC驱动程序

嗨,我目前在Python 3中使用pyodbc,并且试图通过无需在不同计算机上进行手动更改而自动检测ODBC驱动程序的方法。原因是因为我的计算机具有ODBC驱动程序13,而另一位朋友的计算机具有ODBC驱动程序11,因此无论何时从侧面运行脚本,都必须先手动更改版本才能执行该过程。

谁能帮助解决这个问题?以下是我的示例代码。

谢谢

import os
import csv
import pyodbc
import datetime
from dateutil.relativedelta import relativedelta


conn = pyodbc.connect(
    r'DRIVER={ODBC Driver 13 for SQL Server};'
    r'SERVER=****;'
    r'DATABASE=****;'
    r'Trusted_Connection=yes;'
    )

cursor = conn.cursor()

cursor.execute("Select * From Table1")
dData = cursor.fetchall()
Run Code Online (Sandbox Code Playgroud)

python sql-server odbc pyodbc python-3.x

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

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
查看次数

insert varbinary value from hex literal in Microsoft SQL Server

I have a SpringBoot app, where I use jdbcTemplate to insert a row to a mssql

int numOfRowsAffected = remoteJdbcTemplate.update("insert into dbo.[ELCOR Resource Time Registr_]  "
                + "( [Entry No_], [Record ID], [Posting Date], [Resource No_], [Job No_], [Work Type], [Quantity], [Unit of Measure], [Description], [Company Name], [Created Date-Time], [Status] ) "
                + " VALUES (?,CONVERT(varbinary,?),?,?,?,?,?,?,?,?,?,?);",

                ELCORResourceTimeRegistr.getEntryNo(), 
                ELCORResourceTimeRegistr.getEntryNo()), 
                ELCORResourceTimeRegistr.getPostingDate(),
                ELCORResourceTimeRegistr.getResourceNo(), 
                jobNo,
                ELCORResourceTimeRegistr.getWorkType(), 
                ELCORResourceTimeRegistr.getQuantity(),
                ELCORResourceTimeRegistr.getUnitOfMeasure(), 
                ELCORResourceTimeRegistr.getDescription(),
                ELCORResourceTimeRegistr.getCompanyName(), 
                ELCORResourceTimeRegistr.getCreatedDate(), 
                0);
Run Code Online (Sandbox Code Playgroud)

the value of ELCORResourceTimeRegistr.getEntryNo() is a String with the value 0x00173672

but …

sql-server jdbc spring-jdbc jdbctemplate mssql-jdbc

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

在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
查看次数

hybris 6.7 mysql 8.0.11 BadSqlGrammarException

我正在尝试用mysql v8.0.11和驱动程序"mysql-connector-java-8.0.11"初始化hybris v6.7
我创建了方案"y"utf8 - utf8_bin并通过local.properties配置它

local.properties

db.url=jdbc:mysql://localhost/y?useConfigs=maxPerformance&characterEncoding=utf8
db.driver=com.mysql.jdbc.Driver
db.username=root
db.password=hell0w0rld!
db.tableprefix=
db.customsessionsql=SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
mysql.optional.tabledefs=CHARSET=utf8 COLLATE=utf8_bin
mysql.tabletype=InnoDB 
Run Code Online (Sandbox Code Playgroud)

$ ant clean all initialize

     [java] INFO  [main] [Initialization] ###############################################################
     [java] INFO  [main] [Initialization] Initialize system ...
     [java] INFO  [main] [Initialization] ###############################################################
     [java] INFO  [main] [Initialization] Please wait. This step can take some minutes to complete.
     [java] INFO  [main] [Initialization] If you do not receive any feedback on this page in this time, consult the applicationserver logs for …
Run Code Online (Sandbox Code Playgroud)

mysql hybris

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

更快速地计算两个位置之间的距离(邮政编码)

我正在编写一个VBA脚本,用于查找指定半径内的ZIP代码.我有一个Access数据库,在表中有多个记录.每个记录在表上都有一个名称,地址和邮政编码字段.上访问VBA代码提示输入邮政编码和搜索半径用户然后计算用户输入的邮政编码,每个记录的邮政编码之间的距离.计算每个距离后,只要记录落在半径输入字段内,记录就会显示在表格中.

我编写的代码有效但执行时间太长(2000年记录大约30秒).如何减少运行此VBA代码所需的时间?这是我写的代码:

Private Sub Command65_Click()
Dim StartTime As Double
Dim SecondsElapsed As Double
Dim i, j As Integer
Dim db As Database
Dim rs As Recordset
Dim ZIP, r As Double
Dim arr(33144, 3) As Double
Dim lat1, long1, lat2, long2, theta As Double
Dim Distance As Integer
Dim deg2rad, rad2deg As Double
Const PI As Double = 3.14159265359
'Dim Variables

StartTime = Timer
deg2rad = PI / 180
rad2deg = 180 / PI

r = Text1.Value
ZIP = Text2.Value …
Run Code Online (Sandbox Code Playgroud)

performance ms-access vba access-vba

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

从 Pandas DataFrame 插入 Access 数据库

请有人告诉我应该如何插入数据库但是python中的所有数据框?

我找到了这个,但不知道如何插入所有名为 test_data 的数据框,其中包含两个数字:ID、Employee_id。

我也不知道如何为 ID 插入下一个值(类似于 nextval)

谢谢

import pyodbc 
conn = pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\Users\test_database.mdb;')
cursor = conn.cursor()  
cursor.execute('''
                INSERT INTO employee_table (ID, employee_id)
                VALUES(?????????)
              ''')
conn.commit()
Run Code Online (Sandbox Code Playgroud)

python ms-access insert pyodbc pandas

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