小编Gor*_*son的帖子

将相关行的值合并为单个串联字符串值

我正在尝试聚合一些教师数据(以便轻松地显示教师在一个学期中教授的课程),直到现在我才接受为每位教师提供多行.但是,如果我可以将教师的所有教学都放在一行中,那么对某些业务流程会有好处.这是一些示例数据(我的表有更多列,但总体思路不会有太大变化.

tbl_Instructors有:

    N_ID | F_Name | L_Name
    001    Joe      Smith
    002    Henry    Fonda
    003    Lou      Reed
Run Code Online (Sandbox Code Playgroud)

tbl_Courses有:

    Course_ID | N_ID | Course_Info
    AAA         001    PHYS 1
    AAB         001    PHYS 2
    CCC         002    PHYS 12
    DDD         003    PHYS 121
    FFF         003    PHYS 224
Run Code Online (Sandbox Code Playgroud)

我想要回归的是:

    N_ID | First_Name | Last_Name | Course_IDs
    001    Joe          Smith       AAA, AAB
    002    Henry        Fonda       CCC
    003    Lou          Reed        DDD, FFF
Run Code Online (Sandbox Code Playgroud)

我想我需要做一些事情,从tbl_Instructors中选择所有N_ID,然后通过连接从tbl_Courses返回Course_IDs,但这个神奇的步骤已经提到了我.有帮助吗?我可以通过SQL选择执行此操作还是需要使用VB?

ms-access

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

比较object.Value = Null不会产生预期的结果

所以我有一个令人沮丧的简单问题,我似乎无法解决.

If Me.Bank_Credit.Value = Null Then
Me.Bank_Credit.Value = 0
End If
Run Code Online (Sandbox Code Playgroud)

基本上,我有一个未绑定的框,用户输入数据然后点击按钮.确认框上的"是"后,未绑定框上的数据将复制到绑定框中.但是,如果用户没有输入任何内容,那么反过来会创建一个空的绑定字段,这会严重搞砸了路上的查询.

话虽这么说,上面的代码根本不适用于我.例如,如果我设置了如果Me.Bank_Credit.Value = 1然后运行它,则1s变为2s,应该发生.但它只是拒绝为Null甚至""工作.

我很确定这个问题有一个简单的解决方案,我只是想不出来.

提前致谢

ms-access vba

7
推荐指数
1
解决办法
509
查看次数

从SQLite读取数据,其中列名称包含空格

我有一个名为"条件名称"的coulmn名称(.sql文件已从服务器生成)

但在android中我从该表读取数据时遇到异常.

12-24 14:34:00.870:W/System.err(269):android.database.sqlite.SQLiteException:没有这样的列:condition :,

编译时:

SELECT条件,类别,子类别,条件名称,本地路径,远程路径,标题,content_type FROM库WHERE category =?

它无法识别整个表名并在空间中突破.如果您有任何想法,请帮助我.

java sqlite android

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

"没有指定驱动程序名称"将pandas数据帧写入SQL Server表

我正在尝试将Pandas的DataFrame写入SQL Server表.这是我的例子:

import pyodbc
import pandas as pd
import sqlalchemy

df = pd.DataFrame({'MDN': [242342342] })
engine = sqlalchemy.create_engine('mssql://localhost/Sandbox?trusted_connection=yes')
df.to_sql('Test',engine, if_exists = 'append',index = False)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息.有关如何修复的任何想法?

c:\python34\lib\site-packages\sqlalchemy\connectors\pyodbc.py:82: SAWarning: No driver name specified; this is expected by PyODBC when using DSN-less connections
  "No driver name specified; "


---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-25-78677a18ce2d> in <module>()
      4 engine = sqlalchemy.create_engine('mssql://localhost/Sandbox?trusted_connection=yes')
      5 
----> 6 df.to_sql('Test',engine, if_exists = 'append',index = False)
      7 
      8 #cnxn.close()

c:\python34\lib\site-packages\pandas\core\generic.py in to_sql(self, name, con, flavor, schema, if_exists, index, …
Run Code Online (Sandbox Code Playgroud)

python sql-server sqlalchemy pyodbc pandas

7
推荐指数
1
解决办法
8206
查看次数

使用executemany()插入行时"无效的参数类型"(numpy.int64)

我尝试将一堆数据插入数据库

insert_list = [(1,1,1,1,1,1),(2,2,2,2,2,2),(3,3,3,3,3,3),....] #up to 10000 tuples in this list

conn = pyodbc.connect('DRIVER={FreeTDS};SERVER=xxxxx;DATABASE=xxxx;UID=xx;PWD=xx;TDS_Version=7.0')
cursor = conn.cursor()

sql = "insert into ScanEMAxEMAHistoryDay(SecurityNumber, EMA1, EMA2, CrossType, DayCross, IsLocalMinMax) values (?, ?, ?, ?, ?, ?)"

cursor.executemany(sql, insert_list)
Run Code Online (Sandbox Code Playgroud)

cursor.executemany(sql,insert_list)

pyodbc.ProgrammingError:('参数类型无效.param-index = 4 param-type = numpy.int64','HY105')

减少到100元组:

cursor.executemany(sql, insert_list[:100])
Run Code Online (Sandbox Code Playgroud)

cursor.executemany(sql,insert_list [:100])

pyodbc.ProgrammingError:('参数类型无效.param-index = 4 param-type = numpy.int64','HY105')cursor.executemany(sql,insert_list [:100])

减少到5元组:

cursor.executemany(sql, insert_list[:5])
conn.commit()
Run Code Online (Sandbox Code Playgroud)

这可以插入数据库

我试着:

sql = 'SET GLOBAL max_allowed_packet=50*1024*1024'
cursor.execute(sql)
Run Code Online (Sandbox Code Playgroud)

在excutemany()之前,它有一个错误:

pyodbc.ProgrammingError:('42000',"[42000] [FreeTDS] [SQL Server]'GLOBAL'不是公认的SET选项.(195)(SQLExecDirectW)")

我是怎么解决这个问题的

谢谢.

python sql-server numpy pyodbc freetds

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

LocalDateTime 和 SQL Server JDBC 4.2 驱动程序

我正在尝试在java.time最新版本的 Sql Server JDBC 驱动程序中使用新类。正如我所读到的,它应该只适用于方法:PreparedStatement.setObject()ResultSet.getObject()

所以我创建了示例代码,但不能让它与 ResultSets 一起工作。我不知道我在这里做错了什么。

Connection connection = DriverManager.getConnection(connectionString);
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM myTable WHERE ? BETWEEN date_from AND date_to");
preparedStatement.setObject(1, LocalDateTime.now());   // That works

ResultSet resultSet = preparedStatement.executeQuery();
if (resultSet.next()) {
    Object o = resultSet.getObject("date_from"); 
    o.getClass() returns java.sql.Timestamp

    LocalDateTime dateTime = resultSet.getObject("date_from", LocalDateTime.class);
}
Run Code Online (Sandbox Code Playgroud)

这会引发异常:

com.microsoft.sqlserver.jdbc.SQLServerException:不支持转换为类 java.time.LocalDateTime。

驱动版本:mssql-jdbc-6.5.4.jre8-preview.jar

SQL Server 版本:2016


https://docs.microsoft.com/en-us/sql/connect/jdbc/jdbc-4-2-compliance-for-the-jdbc-driver?view=sql-server-2017

如何解释底部表格中的这句话:

Java 8 中的新 Java 类:LocalDate/LocalTime/LocalDateTime、OffsetTime/OffsetDateTime

新的 JDBC 类型:TIME_WITH_TIMEZONE、TIMESTAMP_WITH_TIMEZONE、REF_CURSOR

REF_CURSOR is not supported in SQL Server. …

java sql-server jdbc mssql-jdbc

7
推荐指数
1
解决办法
4969
查看次数

将结果集发送到 Flask 视图时出现“行不是 JSON 可序列化”错误

我正在尝试将 pyodbc 查询的结果发送到我的视图,但我得到了TypeError: Object of type Row is not JSON serializable.

假设我在 SQL Server 中有一个这样的表:

第 1 列 列2 第 3 列
1 值1 值2
2 值3 值4

我通过 pyodbc 查询它并将数据传递到视图,如下所示:

return render_template(
    'index.html'
    ,data={
        'foor':'bar'
        ,'rows':db.execute(
            'SELECT * '
            'FROM [' + table.schema_name + '].[' + table.table_name + ']'
        ).fetchall()
    }
)
Run Code Online (Sandbox Code Playgroud)

如果我打印{{ data.rows }}我想要有[[1,"val1","val2"],[2,"val3","val4"]],但我却得到了[(Decimal('1'), 'val1', 'val2'), (Decimal('2'), 'val3', 'val4')]

如果我print(type(data.rows))在控制器中,我会得到<class 'list'>.

尝试在视图中将其转换为 JSON,{{ data.rows|tojson }} …

sql-server json pyodbc flask

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

我可以使用查询参数插入表名吗?

我有一个 SQL Alchemy 引擎,我尝试通过 sqlalchemy.sql.text 插入参数以防止 SQL 注入。

以下代码有效,其中我为条件和条件值编写了变量。

from sqlalchemy import create_engine
from sqlalchemy.sql import text

db_engine = create_engine(...)

db_engine.execute(
         text(
             'SELECT * FROM table_name WHERE :condition_1 = :condition_1_value'), condition_1="name", condition_1_value="John"
         )
).fetchall()
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试为 编写变量名称时table_name,它返回错误。

from sqlalchemy import create_engine
from sqlalchemy.sql import text

db_engine = create_engine(...)

db_engine.execute(
         text(
             'SELECT * FROM :table_name WHERE :condition_1 = :condition_1_value'), table_name="table_1", condition_1="name", condition_1_value="John"
         )
).fetchall()
Run Code Online (Sandbox Code Playgroud)

有什么想法为什么这行不通吗?

编辑:我知道这与不是字符串有关table_name,但我不确定如何以另一种方式做到这一点。

python sqlalchemy

7
推荐指数
1
解决办法
1622
查看次数

Unicode(希腊语)字符存储在数据库中,如"??????"

数据库中的希腊字符就像问号("?????").我找不到解决方案.我使用Java/Swing开发了一个应用程序但是当我在MySQL中插入希腊字母时就像问号一样.我将db collat​​ion更改为utf8和列.我的项目编码设置为UTF-8.当我从MySQL插入希腊字母时,它们被正确存储.

我正在使用MySQL连接器jar文件.

public class Testing {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {

    try {
        Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/chartest","root","1234");
        Statement pst=conn.createStatement();
        String var1="??????";
        String sql="INSERT INTO chars(value) values('"+var1+"')";
       pst.execute(sql);
    } catch (SQLException ex) {
        Logger.getLogger(Testing.class.getName()).log(Level.SEVERE, null, ex);
    }
}
Run Code Online (Sandbox Code Playgroud)

}

java mysql jdbc

6
推荐指数
1
解决办法
1749
查看次数

加速从 pyodbc 插入 SQL Server

在 中python,我有一个从一个数据库 ( Redshiftvia psycopg2) 中选择数据的过程,然后将该数据插入SQL Server(via pyodbc)。我选择进行读/写而不是读/平面文件/加载,因为每天的行数约为 100,000。似乎更容易简单地连接和插入。但是 - 插入过程很慢,需要几分钟。

有没有更好的方法使用 Pyodbc 将数据插入 SQL Server?

select_cursor.execute(output_query)

done = False
rowcount = 0

while not done:
    rows = select_cursor.fetchmany(10000)

    insert_list = []

    if rows == []:
        done = True
        break

    for row in rows:
        rowcount += 1

        insert_params = (
            row[0], 
            row[1], 
            row[2]
            )

        insert_list.append(insert_params)            

    insert_cnxn = pyodbc.connect('''Connection Information''')

    insert_cursor = insert_cnxn.cursor()

    insert_cursor.executemany("""
        INSERT INTO Destination (AccountNumber, OrderDate, Value)
        VALUES (?, ?, ?) …
Run Code Online (Sandbox Code Playgroud)

python sql-server pyodbc

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

标签 统计

sql-server ×5

pyodbc ×4

python ×4

java ×3

jdbc ×2

ms-access ×2

sqlalchemy ×2

android ×1

flask ×1

freetds ×1

json ×1

mssql-jdbc ×1

mysql ×1

numpy ×1

pandas ×1

sqlite ×1

vba ×1