小编Gor*_*son的帖子

如何在Ubuntu上配置SSL支持pymssql?

在Ubuntu上配置带有SSL支持的pymssql所需的步骤是什么,所以我可以连接到需要加密连接的SQL Server实例(例如Azure)?

python ubuntu pymssql

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

如何使用JDBC从存储过程中获取*everything*

使用JDBC处理SQL Server存储过程时,偶尔会遇到两种奇怪的行为:

问题1:我在SQL Server Management Studio(SSMS)中运行存储过程并返回结果集.但是,当我尝试

try (CallableStatement cs = conn.prepareCall("{call dbo.TroublesomeSP}")) {
    ResultSet rs = cs.executeQuery();
Run Code Online (Sandbox Code Playgroud)

我得到了例外

com.microsoft.sqlserver.jdbc.SQLServerException:该语句未返回结果集.

问题2:我在SSMS中运行存储过程并引发错误,但是当我.execute对存储过程使用JDBC时,不会抛出任何异常.

为什么会出现这些问题?如何避免这些问题?

java sql-server stored-procedures jdbc

4
推荐指数
1
解决办法
1404
查看次数

BULK INSERT错误代码3:系统找不到指定的路径

我试图使用pyodbc批量插入本地文件到远程MS_SQL数据库.我能够连接到数据库,我能够INSERT INTO表,就像我之前做过的那样.我遇到问题的地方是BULK INSERT.

我用BULK INSERT它来加速我的INSERT过程.

代码如下所示:

statement = """ BULK INSERT BulkTable FROM 'C:\\Users\\userName\\Desktop\\Folder\\Book1.csv' WITH (
       FIRSTROW=2,
       FIELDTERMINATOR=',',
       ROWTERMINATOR = '\\n'
);
"""
cursor.execute(statement)
cnxn.commit()
Run Code Online (Sandbox Code Playgroud)

此代码会产生此错误:

Traceback (most recent call last):
   File "tester.py", line 41, in <module> cursor.execute(statement)
   pyodbc.ProgrammingError: 
    ('42000', '[42000] [Microsoft][SQL Server Native Client 11.0][SQL Server]  Cannot bulk load because the file    "C:\\Users\\userName\\Desktop
\\Folder\\Book1.csv" could not be opened.
    Operating system error code 3(The system cannot find the path specified.). (4861) (SQLExecDirectW)')` …
Run Code Online (Sandbox Code Playgroud)

python sql-server bulkinsert pyodbc

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

SQLAlchemy不返回SQL Server数据库中的所有表名

当我下载这个示例数据库,AdventureWorksLT2012_Data,并尝试访问sql炼金术中的table_names时,通过

from sqlalchemy import create_engine
engine = create_engine("mssql+pyodbc://sa:PASSWORD_HERE@localhost:1433/AdventureWorksLT?driver=FreeTDS")
engine.table_names()
Run Code Online (Sandbox Code Playgroud)

我得到['BuildVersion', 'ErrorLog'].但是,这是数据库中缺少的表.

例如,执行此查询会给出预期的表名...

rs = engine.execute("SELECT name FROM sys.Tables")
[row['name'] for row in rs]
Run Code Online (Sandbox Code Playgroud)

我明白了

['BuildVersion', 'Address', 'Customer', 'CustomerAddress', 'Product', 'ProductCategory', 'ProductDescription', 'ProductModel', 'ProductModelProductDescription', 'SalesOrderDetail', 'SalesOrderHeader', 'ErrorLog']
Run Code Online (Sandbox Code Playgroud)

这是一个错误,还是我忽略了什么?如果我创建一个新数据库,以及具有相同名称的表,则按engine.table_names()预期工作.

python t-sql sql-server sqlalchemy pyodbc

4
推荐指数
1
解决办法
790
查看次数

使用sqlalchemy.engine.url.URL为mssql + pyodbc构建连接URL

问题...

我试图通过SQLAlchemy连接到MSSql服务器.这是我的代码与假凭证(显然不是我真正的凭据).

代码...

credentials = {
'username'  : 'SPOTTER_xyz_ACC',
'password'  : '123Goodbye2016!@#',
'host'      : 'MARYLQLT01',
'database'  : 'LRS_DUS',
'port'      : '1560'}

connect_url = sqlalchemy.engine.url.URL(
    'mssql+pyodbc',
    username=credentials['username'],
    password=credentials['password'],
    host=credentials['host'],
    port=credentials['port'],
    query=dict(service_name=credentials['database']))

engine = create_engine(connect_url)
connection=engine.connect()
Run Code Online (Sandbox Code Playgroud)

这是我得到的.pyodbc错误.

(pyodbc.Error) ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source
name not found and no default driver specified (0) (SQLDriverConnect)')
Run Code Online (Sandbox Code Playgroud)

额外细节

但是,这是奇怪的...我如果做一个pyodbc连接并使用Pandas.read_sql,那么我可以没有错误地获取数据.所以我不明白为什么我得到'pyodbc'错误????

connection=pyodbc.connect(\
                          'Driver={SQL Server}; \
                          Server=MARYLQLT01; \
                          Database=LRS_DUS; \
                          UID=SPOTTER_xyz_ACC; \
                          PWD=123Goodbye2016!@#')

stmt='select * from PD_SC_All'
df=pd.read_sql(stmt,connection)
Run Code Online (Sandbox Code Playgroud)

然后我可以看到数据帧.

那么,为什么(pyodbc.Error)我尝试连接SQLAlchemy时会遇到什么?

系统信息

Windows 7 …
Run Code Online (Sandbox Code Playgroud)

python sql-server connection-string sqlalchemy pyodbc

4
推荐指数
1
解决办法
5665
查看次数

SQLAlchemy 无法自动加载 mssql 临时表

我无法连接到使用 SQLAlchemy 在 SQL 服务器上创建的临时表。

我连接到服务器:

engine = create_engine(URL, poolclass=StaticPool)
Run Code Online (Sandbox Code Playgroud)

我用来自熊猫数据帧的数据填充临时表:

df_tmp.to_sql('#table_test', con=engine)
Run Code Online (Sandbox Code Playgroud)

该表存在于服务器上:

res = engine.execute('SELECT * FROM tempdb..#table_test')
print(res)
Run Code Online (Sandbox Code Playgroud)

它返回我的数据元组列表。但是当我尝试创建一个 SQLAlchemy 表时,它失败了NoSuchTableError

from sqlalchemy import create_engine, MetaData, Table
metadata = MetaData(engine)
metadata.create_all()
table = Table('#table_test', metadata, autoload=True, autoload_with=engine)
Run Code Online (Sandbox Code Playgroud)

我也试过这个,它给出了同样的错误:

table = Table('tempdb..#table_test', metadata, autoload=True, autoload_with=engine)
Run Code Online (Sandbox Code Playgroud)

而且我还尝试使用 SQL 命令创建一个空白表,当我尝试使用 SQLAlchemy 读取它时会出现相同的错误:

engine.execute('CREATE TABLE #table_test (id_number INT, name TEXT)')
Run Code Online (Sandbox Code Playgroud)

SQLAlchemy 是否支持临时表?如果是这样,这里出了什么问题?如果可能,我希望将临时表作为 sqlalchemy.schema.Table 对象,因为它适合我的所有其他代码。

python sql-server sqlalchemy pyodbc pandas

4
推荐指数
1
解决办法
270
查看次数

使用 StringEncryptedType、SQLAlchemy 时出现 VARCHAR 长度错误

我有以下模型:

from enum import Enum
from sqlalchemy_utils.types.encrypted.encrypted_type import StringEncryptedType
from sqlalchemy import (
    Column,
    Integer,
    Float,
    Enum as SQAEnum,
    String
)
from backend.db import Base
from backend.config import Config


class AuthProviders(Enum):
    google = "Google"
    facebook = "Facebook"
    vest = "Vest"


class Users(Base):
    __tablename__ = "users"

    id = Column(Integer, primary_key=True)
    email = Column(String(255), unique=True, index=True)
    hashed_password = Column(StringEncryptedType(String(255), Config.MYSQL_ENCRYPT_KEY))
    auth_provider = Column(SQAEnum(AuthProviders))
    timestamp = Column(Float(precision=32))

Run Code Online (Sandbox Code Playgroud)

alembic 使用哪个生成以下迁移脚本:

from alembic import op
import sqlalchemy as sa
from sqlalchemy_utils.types.encrypted.encrypted_type import StringEncryptedType

from backend.config …
Run Code Online (Sandbox Code Playgroud)

python mysql encryption sqlalchemy alembic

4
推荐指数
1
解决办法
2273
查看次数

将图像存储到 Access 数据库的附件字段中

我正在编写一个 VB 应用程序,需要在数据库中存储图像。用户在计算机上选择图像,这会以字符串形式提供路径。这是我的尝试,但是我收到错误“INSERT INTO 查询不能包含多值字段”。

这是我的代码:

Dim buff As Byte() = Nothing
Public Function ReadByteArrayFromFile(ByVal fileName As String) As Byte()
    Dim fs As New FileStream(fileName, FileMode.Open, FileAccess.Read)
    Dim br As New BinaryReader(fs)
    Dim numBytes As Long = New FileInfo(fileName).Length
    buff = br.ReadBytes(CInt(numBytes))
    Return buff
End Function

Sub ....
    Dim connImg As New OleDbConnection
    Dim sConnString As String
    Dim cmdImg As New OleDbCommand

    sConnString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & My.Settings.DB & ";Persist Security Info=False;"
    connImg = New OleDbConnection(sConnString)
    connImg.Open()
    cmdImg.Connection = connImg …
Run Code Online (Sandbox Code Playgroud)

database vb.net attachment oledbcommand ms-access-2013

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

Jackcess“ NoClassDefFoundError”异常

我正在使用jackcess来访问我的访问数据库。但我遵循例外

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang/builder/CompareToBuilder
    at com.healthmarketscience.jackcess.impl.RowIdImpl.compareTo(RowIdImpl.java:113)
    at com.healthmarketscience.jackcess.impl.IndexData$Entry.compareTo(IndexData.java:1838)
    at com.healthmarketscience.jackcess.impl.IndexData$Entry.compareTo(IndexData.java:1646)
    at java.util.Collections.indexedBinarySearch(Collections.java:273)
    at java.util.Collections.binarySearch(Collections.java:259)
    at com.healthmarketscience.jackcess.impl.IndexData$DataPage.findEntry(IndexData.java:2368)
    at com.healthmarketscience.jackcess.impl.IndexData.findEntryPosition(IndexData.java:722)
    at com.healthmarketscience.jackcess.impl.IndexData.access$3300(IndexData.java:56)
    at com.healthmarketscience.jackcess.impl.IndexData$EntryCursor.updatePosition(IndexData.java:2133)
    at com.healthmarketscience.jackcess.impl.IndexData$EntryCursor.restorePosition(IndexData.java:2072)
    at com.healthmarketscience.jackcess.impl.IndexData$EntryCursor.restorePosition(IndexData.java:2055)
    at com.healthmarketscience.jackcess.impl.IndexData$EntryCursor.beforeEntry(IndexData.java:2017)
    at com.healthmarketscience.jackcess.impl.IndexCursorImpl.findPotentialRow(IndexCursorImpl.java:368)
    at com.healthmarketscience.jackcess.impl.IndexCursorImpl.findFirstRowByEntryImpl(IndexCursorImpl.java:262)
    at com.healthmarketscience.jackcess.impl.IndexCursorImpl.findFirstRowByEntry(IndexCursorImpl.java:135)
    at com.healthmarketscience.jackcess.impl.DatabaseImpl$DefaultTableFinder.findRow(DatabaseImpl.java:1890)
    at com.healthmarketscience.jackcess.impl.DatabaseImpl$TableFinder.findObjectId(DatabaseImpl.java:1799)
    at com.healthmarketscience.jackcess.impl.DatabaseImpl.readSystemCatalog(DatabaseImpl.java:804)
    at com.healthmarketscience.jackcess.impl.DatabaseImpl.<init>(DatabaseImpl.java:513)
    at com.healthmarketscience.jackcess.impl.DatabaseImpl.open(DatabaseImpl.java:386)
    at com.healthmarketscience.jackcess.DatabaseBuilder.open(DatabaseBuilder.java:170)
    at com.healthmarketscience.jackcess.DatabaseBuilder.open(DatabaseBuilder.java:193)
    at ass.Access.main(Access.java:25)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang.builder.CompareToBuilder
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 23 more
Run Code Online (Sandbox Code Playgroud)

我已经使用了jdbc,但是它也不起作用。如何解决我的问题?

java ms-access netbeans-7 jackcess

3
推荐指数
1
解决办法
6268
查看次数

pyodbc.ProgrammingError:没有结果.在一次执行多个语句时,以前的SQL不是查询

我正在处理sql server数据库,

我有一个名为' table1 ' 的表,包含1列和1行

exp_num
0 
Run Code Online (Sandbox Code Playgroud)

我正在尝试将0值exp_num列更新为+1,并返回旧实验和更新实验.

为此,我使用声明语句.

DECLARE @UpdateOutput1 table (Oldexp_num int,Newexp_num int);

UPDATE get_exp_num
    SET exp_num = exp_num+1

OUTPUT
    DELETED.exp_num,
    INSERTED.exp_num
  INTO @UpdateOutput1;

 select * from @UpdateOutput1
Run Code Online (Sandbox Code Playgroud)

当我在运行这个时,SQL editor我得到了结果.

Oldexp_num   Newexp_num
    0             1
Run Code Online (Sandbox Code Playgroud)

但如果我把它作为一个查询,并尝试使用pyodbc包我得到错误.

import pyodbc

connection = pyodbc.connect()  # i am getting a connection
query = "DECLARE @UpdateOutput1 table (Oldexp_num int,Newexp_num int);UPDATE get_exp_num SET exp_num = exp_num+1 OUTPUT DELETED.exp_num, INSERTED.exp_num INTO @UpdateOutput1; select Newexp_num from @UpdateOutput1;"
cursor = connection.cursor()
cursor.execute(query)
cursor.fetchone() …
Run Code Online (Sandbox Code Playgroud)

python pyodbc

3
推荐指数
1
解决办法
1498
查看次数