背景:我编写了一些 ruby 转换脚本,它们从 MS SQL 获取数据进行转换,然后将其存储回数据库我正在使用微型 tds gem,它可以在 freetds 上工作
--问题:对于 sql 中 varchar max 且字符串长度大于 2048 的列,当使用微小 tds 提取数据时,这些列会被截断为 2048 长度。
Freetds 协议 7.2 确实解决了这个问题,但在 Windows 平台上不可用,代码在 Mac 上完美运行。但由于与 ETL 工具集成,我必须将其部署在 Windows 计算机上。
——有没有人能解决这个问题。
我能够让它在 Windows 7 上完全运行,但我必须将它移到 Linux 服务器上。我现在正在 VM 中运行 Ubuntu 16.04.1 LTS 64 位以进行测试,然后再在服务器上复制该过程。
我很确定问题出在我的 FreeTDS 或 DSN 设置中。
我应该停止浪费时间而只使用 Python 吗?或者我会在 ODBC 和 unixODBC 上遇到同样的问题吗?
完整的 R 脚本:
library(RODBC)
#saving from a .csv to dataframe df
df <- read.csv("./Documents/test.csv")
#creating connection to db
conn <- odbcDriverConnect('myDSN')
#writing
sqlSave(conn, df, tablename = 'dbo.test0', append = F, rownames = F, verbose = TRUE, safer = true, fast = F)
Run Code Online (Sandbox Code Playgroud)
控制台
> conn <- odbcDriverConnect('myDSN')
Run Code Online (Sandbox Code Playgroud)
返回错误信息:
Warning messages:
1: In odbcDriverConnect("myDSN") :
[RODBC] …
Run Code Online (Sandbox Code Playgroud) 我正在使用 SQLAlchemy 连接到 SQL Server 数据库。我查询的表有一DATETIME
列。在 Windows 上,SQLAlchemy 对象上的结果属性是一个 Pythondatetime
对象。在 Linux 上,它是一个字符串。
我的 SQLAlchemy 类看起来像这样
class MyTable(Model):
id_ = db.Column('Id', db.Integer, primary_key=True, index=True)
as_of_date = db.Column('AsOfDate', db.DateTime, nullable=False, server_default=db.FetchedValue())
# Other columns
Run Code Online (Sandbox Code Playgroud)
在 Windows 上,我得到了这个
>>db.session.query(MyTable.as_of_date).first()
datetime.datetime(2006, 11, 30, 0, 0)
Run Code Online (Sandbox Code Playgroud)
在 Linux 上,我得到了这个
>>db.session.query(MyTable.as_of_date).first()
('2006-11-30 00:00:00.00000000',)
Run Code Online (Sandbox Code Playgroud)
我的连接字符串看起来像这样
Linux
mssql+pyodbc:///?odbc_connect=DRIVER={FreeTDS};Server=my_server;Port=1433;Database=my_database;UID=my_user;PWD=my_password;TDS_Version=8.0;
Windows
mssql+pyodbc://my_user:my_password@my_server/my_database?driver=SQL Server Native Client 11.0
Run Code Online (Sandbox Code Playgroud)
我猜这与 FreeTDS 驱动程序有关。虽然SQLAlchemy的文档状态是
支持日期和时间。大多数 MSSQL 驱动程序都要求将绑定参数转换为 datetime.datetime() 对象, 如果需要,则从字符串处理结果。DATE 和 TIME 类型不适用于 MSSQL 2005 和更早版本 …
我想尝试让 Rails 和 MSSQL 在我们的 CI 工具 CircleCI 中进行对话。我在 Mac 上工作,所以设置起来相当轻松。我使用 Homebrew 在本地安装了 FreeTDS。然后我生成了一个 MSSQL docker 映像,并在 Rails 应用程序中设置我的配置以指向它,一切正常。
CircleCI 有点不同。
我做了以下事情。
在我的 gemfile 中添加:
# mssql database gems
gem 'tiny_tds'
gem 'activerecord-sqlserver-adapter'
Run Code Online (Sandbox Code Playgroud)
修改了我们的database.yml文件:
default: &default
adapter: sqlserver
pool: 5
encoding: utf8
mode: dblib
development:
<<: *default
host: localhost
database: collections_development
username: sa
password: P@55w0rd
test:
<<: *default
host: localhost
database: collections_test
username: sa
password: P@55w0rd
Run Code Online (Sandbox Code Playgroud)
我用以下命令构建了一个 docker 镜像:
FROM circleci/ruby:2.4.1-node-browsers
RUN set -ex \
&& sudo apt-get install build-essential …
Run Code Online (Sandbox Code Playgroud) 非常感谢对此问题的任何帮助。
目标:使用 FreeTDS 将 Django 连接到 MSSQL 服务器。我正在使用 Debian x64 盒子。
问题:尝试建立连接时,我得到以下信息。
('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'libtdsodbc.so' : file not found (0) (SQLDriverConnect)")
Run Code Online (Sandbox Code Playgroud)
我/etc/odbcinst.ini
的配置如下
[FreeTDS]
Description = FreeTDS
driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
Run Code Online (Sandbox Code Playgroud)
这些文件确实存在并且有 777 次测试访问权限。
连接字符串就像
cnxn = pyodbc.connect(
'DRIVER={FreeTDS};SERVER=' + server + ';PORT=1443;DATABASE=' + database + ';UID=' + username + ';PWD=' + password)
cursor = cnxn.cursor()
Run Code Online (Sandbox Code Playgroud)
我的 odbcinst -j 读取(因为添加了符号链接)
unixODBC 2.3.1
DRIVERS............: /usr/local/etc/odbcinst.ini
SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini
FILE DATA SOURCES..: …
Run Code Online (Sandbox Code Playgroud) 我正在运行LAMP服务器,但现在需要连接到MS SQL(客户端请求)。我听说微软有驱动程序,但无法验证
有人知道Microsoft驱动程序是否可用于Unix吗?如果没有,我应该坚持使用FreeTDS吗?PHP似乎建议这样做,但是似乎缺少安装文档。任何一个方向都将不胜感激。
抱歉,我对设置PHP驱动程序不熟悉。
只是出于某些背景,我正在从LAMP服务器运行Intranet,但需要连接到外部MS SQL DB Server(当然是Windows)上的数据源。我正在运行PHP5。
我们正在为数据库运行带有Microsoft SQL Server的Linux服务器.有没有比FreeTDS更好的(最好是开源)c库我们可以使用?
谢谢
我在从PHP连接到MS SQL 2005时遇到问题.
我可以从shell连接,使用...
tsql -S 10.0.0.134 -p 1433 -U gareth
Run Code Online (Sandbox Code Playgroud)
输入一个简单的查询按预期工作...
1> SELECT @@VERSION AS MSSQL_VERSION
2> go
MSSQL_VERSION
Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
Nov 24 2008 13:01:59
Copyright (c) 1988-2005 Microsoft Corporation
Express Edition on Windows NT 6.1 (Build 7601: Service Pack 1)
Run Code Online (Sandbox Code Playgroud)
但是,从PHP脚本尝试此操作不起作用...
$test = mssql_connect('10.0.0.134:1433', 'gareth', 'mypass');
Run Code Online (Sandbox Code Playgroud)
...并生成一个mssql_connect()[function.mssql-connect]:无法连接到服务器错误.
我可以看到/ usr/lib/php/modules中的mssql.so模块和phpinfo()显示模块已加载.
如果有人能给我看一下freetds.conf和odbc.conf的示例配置,我很乐意使用odbc_connect
谢谢
我正在尝试将遗留数据从MS SQL数据库迁移到我的Rails应用程序中.我在freetds中添加了正确连接的配置.在我的Gemfile中,我分别添加了tiny_tds和activerecord-sqlserver-adapter.
我创建了一个文件来存放旧数据库中的类以转换为ActiveRecord:
class LegacyUser < ActiveRecord::Base
establish_connection :legacy
set_table_name 'users'
end
.
.
.
Run Code Online (Sandbox Code Playgroud)
database.yml的
legacy:
adapter: sqlserver
mode: odbc
dsn: legacy_db_name
host: db_host_name
database: legacy_db_name
port: 1433
username: username
password: password
Run Code Online (Sandbox Code Playgroud)
然后我有rake任务来转换数据:
legacy.rake
desc 'migrate users'
task :users => :environment do
require 'lib/tasks/legacy_classes'
LegacyUser.each do |user|
begin
new_user = User.new
new_user.attributes = {
:firstname => user.firstname,
:lastname => user.lastname,
:email => user.email,
:created_at => Time.now,
:updated_at => Time.now
}
new_user.save!
puts "User #{user.id} successfully …
Run Code Online (Sandbox Code Playgroud) sql-server freetds legacy-database ruby-on-rails-4 rails-activerecord
我正在尝试在CentOS 6.5版(最终版)64位上安装dblib.centos 6没有freetds所以我不得不从其他地方获得freetds.freetds-devel-0.91-2.1.x86_64.rpm
.使用pecl下载并安装PDO DBLIB,但我陷入了困境.我收到的错误如下.
[root@rajesh PDO_DBLIB-1.0]# make
/bin/sh /root/php/PDO_DBLIB-1.0/libtool --mode=compile cc -I/usr/include/php/ext -DPDO_DBLIB_FLAVOUR=\"freetds\" -I. -I/root/php/PDO_DBLIB-1.0 -DPHP_ATOM_INC -I/root/php/PDO_DBLIB-1.0/include -I/root/php/PDO_DBLIB-1.0/main -I/root/php/PDO_DBLIB-1.0 -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib -DHAVE_CONFIG_H -g -O2 -c /root/php/PDO_DBLIB-1.0/pdo_dblib.c -o pdo_dblib.lo
libtool: compile: cc -I/usr/include/php/ext -DPDO_DBLIB_FLAVOUR=\"freetds\" -I. -I/root/php/PDO_DBLIB-1.0 -DPHP_ATOM_INC -I/root/php/PDO_DBLIB-1.0/include -I/root/php/PDO_DBLIB-1.0/main -I/root/php/PDO_DBLIB-1.0 -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib -DHAVE_CONFIG_H -g -O2 -c /root/php/PDO_DBLIB-1.0/pdo_dblib.c -fPIC -DPIC -o .libs/pdo_dblib.o
In file included from /root/php/PDO_DBLIB-1.0/pdo_dblib.c:32:
/root/php/PDO_DBLIB-1.0/php_pdo_dblib_int.h:45:23: error: sybfront.h: No such file or directory
/root/php/PDO_DBLIB-1.0/php_pdo_dblib_int.h:46:20: error: sybdb.h: No such file or …
Run Code Online (Sandbox Code Playgroud)