在Ubuntu上配置带有SSL支持的pymssql所需的步骤是什么,所以我可以连接到需要加密连接的SQL Server实例(例如Azure)?
使用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时,不会抛出任何异常.
为什么会出现这些问题?如何避免这些问题?
我试图使用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) 当我下载这个示例数据库,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()预期工作.
我试图通过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) 我无法连接到使用 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 对象,因为它适合我的所有其他代码。
我有以下模型:
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) 我正在编写一个 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) 我正在使用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,但是它也不起作用。如何解决我的问题?
我正在处理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 ×7
pyodbc ×5
sql-server ×5
sqlalchemy ×4
java ×2
alembic ×1
attachment ×1
bulkinsert ×1
database ×1
encryption ×1
jackcess ×1
jdbc ×1
ms-access ×1
mysql ×1
netbeans-7 ×1
oledbcommand ×1
pandas ×1
pymssql ×1
t-sql ×1
ubuntu ×1
vb.net ×1