DBD::PgPerl 的PostgreSQL绑定将始终获取查询的整个结果集.因此,如果您使用简单的prepare执行来遍历大型表,那么只需运行就可以将整个表放在内存中$sth->execute().准备好的陈述和电话fetch_row都没有帮助.
如果您正在使用BIG表,以下将失败.
use DBI;
my $dbh = DBI->connect("dbi:Pg:dbname=big_db","user","password",{
AutoCommit => 0,
ReadOnly => 1,
PrintError => 1,
RaiseError => 1,
});
my $sth = $dbh->prepare('SELECT * FROM big_table');
$sth->execute(); #prepare to run out of memory here
while (my $row = $sth->fetchrow_hashref('NAME_lc')){
# do something with the $row hash
}
$dbh->disconnect();
Run Code Online (Sandbox Code Playgroud) 我在Oracle SQL Developer中执行以下步骤(逐步使用F-9):
create database link mydb connect to my_schema identified by mypwd using 'connection1';
select * from users where id = 1;
rollback;
ALTER SESSION CLOSE DATABASE LINK mydb;
drop database link mydb;
Run Code Online (Sandbox Code Playgroud)
我尝试关闭数据库链接时收到错误:
SQL错误:ORA-02080:数据库链接正在使用02080. 00000 - "数据库链接正在使用中"
*原因:事务处于活动状态或者在alter session close database link命令中给出的数据库链接上打开了游标.
*动作:提交或回滚,并关闭所有游标
交易完成了,但是当我这样做时,select * from V$DBLINK;我看到还有一个打开的光标,但我不知道如何关闭那个.
sql oracle database-connection database-link database-cursor
我必须完成由离开公司的人完成的开发,我试图理解在另一个游标内部构建的游标..这样的事情:
CURSOR c_fund as select col_1,
col_2,
CURSOR(select col_10 * {some formula} clo_n,
col_m
from table2
where col_8 is not null)
(...)
Run Code Online (Sandbox Code Playgroud)
我怎么才能阅读内部光标?当我执行主游标的查询时,我有这个结果:
COL_1 COL_2 CURSOR
------- ------ -------
11619187 604441 (CURSOR)
11619187 604434 (CURSOR)
11619187 604439 (CURSOR)
Run Code Online (Sandbox Code Playgroud)
当我在CURSOR数据上双击(在TOAD上)时,会弹出一个显示数据的新窗口:
CLO_N COL_M
----- ---------------
009511 1g0-M-TPT_BNM
009511 1g0-Q--213_BNM
009511 C--F_R*P_C:R:CT
009511 1g0-M--16_BNM
009511 P*RF_DI-TR
009511 *CR
009511 BOWLING
009511 C--F_BNM
009511 C:PIT:L
009511 N:V
009511 INF--IGN
Run Code Online (Sandbox Code Playgroud) 我有这个问题:我正在编写一些Python脚本,而到目前为止,我在整个脚本中使用单个MySQLConnector连接没有任何问题(仅在脚本末尾关闭它),最近我有一些问题。
如果我在脚本开头创建一个连接,类似于(我知道,忽略安全问题):
db_conn = mysql.connector.connect(user='root', password='myPassword', host='127.0.0.1', database='my_db', autocommit=True)
Run Code Online (Sandbox Code Playgroud)
然后总是像这样使用它:
db_conn.cursor(buffered=True).execute(...)
Run Code Online (Sandbox Code Playgroud)
或 fetch 等方法,我会收到如下错误:
Failed executing the SQL query: MySQL Connection not available.
Run Code Online (Sandbox Code Playgroud)
或者
Failed executing the SQL query: No result set to fetch from.
Run Code Online (Sandbox Code Playgroud)
或者
OperationalError: (2013, 'Lost connection to MySQL server during query')
Run Code Online (Sandbox Code Playgroud)
代码是正确的,我只是不明白为什么会发生这种情况。也许是因为我在异步中多次同时运行同一个函数(尝试了 2 次),所以也许对游标的并发访问会导致这种情况?
我发现有人每次都使用不同的数据库连接来修复它(此处)。
我尝试为数据库的每个查询创建一个新连接,现在根本没有错误。它工作得很好,但似乎有点矫枉过正。想象一下调用异步函数 10 或 100 次...将会创建大量数据库连接。会引起问题吗?内存会耗尽吗?而且,我想它会放缓。
有没有办法通过为所有查询保持相同的连接来解决这个问题?为什么会发生这种情况?
python mysql mysql-python mysql-connector-python database-cursor
是否可以使用 psycopg2 在双游标打开语句中传递多个查询with(首先打开连接,然后游标)?
例如替换:
import psycopg2
def connector():
return psycopg2.connect(**DB_DICT_PARAMS)
########
sql_update1 = ("UPDATE table SET array = %s::varchar[], "
"array_created = true, timestamp = now() AT TIME ZONE 'UTC' "
"WHERE id = %s")
sql_update2 = ("UPDATE table SET json_field = %s "
"WHERE id = %s")
with connector() as conn:
with conn.cursor() as curs:
curs.execute(sql_update1, [stringArray, ID])
with connector() as conn:
with conn.cursor() as curs:
curs.execute(sql_update2, [jsonString, ID])
Run Code Online (Sandbox Code Playgroud)
经过:
#(...)
sql_update1 = ("UPDATE table SET array …Run Code Online (Sandbox Code Playgroud) 我有一个数据库表,reviews其中id 是自动递增的,而 rating 是 0 到 100 之间的整数。idrating
我正在尝试在 GraphQL API 中创建基于游标的分页,但正在努力为hasPreviousPage和创建必要的查询hasNextPage。
这是我的数据:
ID: 1, RATING: 50
ID: 2, RATING: 80
ID: 3, RATING: 20
ID: 4, RATING: 40
ID: 5, RATING: 60
Run Code Online (Sandbox Code Playgroud)
以下是 GQL 查询的示例:
reviews(first: 3)
Run Code Online (Sandbox Code Playgroud)
哪个返回
ID: 1, RATING: 50
ID: 2, RATING: 80
ID: 3, RATING: 20
Run Code Online (Sandbox Code Playgroud)
带页面信息
hasPreviousPage: false
hasNextPage: true
Run Code Online (Sandbox Code Playgroud)
pageInfo 的查询将是
ID: 1, RATING: 50
ID: 2, RATING: 80
ID: 3, RATING: 20
ID: 4, …Run Code Online (Sandbox Code Playgroud) 我有一个python程序从db2数据库调用存储过程.我results = cursor.fetchall()用来处理我的存储过程的结果.但是,我的存储过程返回两个游标.results只包含第一个.我需要一种方法来遍历尽可能多的游标.我希望fetchmany()这是我的答案,但事实并非如此.
我真的需要能够做多个结果集,因为我写的程序只能调用一个存储过程.要回去让它能够打两个电话需要很多.除了其中一件事,我需要让10个光标返回.一切都是动态的,因此应用程序不知道它正在运行什么程序,它只是获取数据并将其吐入excel而不知道其含义.我需要一个光标用于数据,而另一个光标用于不同类型的计数和总计.
请帮忙.让我知道如果你需要更多的信息,我不认为精心设计的代码是必要的,因为我正在寻找一个内置的功能来做到这一点,或者甚至可能是一个不同的库,因为我已经完成了我的谷歌搜索,它看起来像pyodbc不会为DB2做这件事.DB2是一个要求:(
我编写了一个包含存储过程和REF游标的包.我现在可以通过这个光标显示表格中的所有列.我希望能够插入一个循环,如果满足某个条件,七个列中的四个将显示四个星号,其余列将显示其正常数据.
例如,我有一个名为country的列.每当美国出现在记录中时,(empid,ss,address,dept)的四列将只需显示****,而其余列将显示为正常.如果非美国的国家/地区在记录中,则所有列都将正常显示数据.我知道有一个noprint函数,但我似乎无法弄清楚如何只显示星号.
我是 python 和 mysql 的新手。我想了解如何连接到 mysql 数据库。到目前为止,我知道我可以使用 pymysql 并创建一个游标对象。但我真的不知道光标在哪里。所以我有三个问题。
游标到底是什么以及为什么要使用它?
我听说最好避免光标。为什么?
如何在没有游标的情况下使用mysql数据库?(我已经搜索并没有找到任何结果。我认为原因是我不知道我应该搜索什么)
我正在研究光标,我在某处读到了.每次从光标中获取一行时,它都会导致网络往返,而正常的选择查询只会导致一次往返,但结果集大.
任何人都可以解释这意味着什么?通过一些例子,网络往返和一次往返意味着什么.在使用游标的时候和循环使用的时候?
我正在尝试创建一个使用游标的过程,该游标可以启用我的架构中的所有触发器。但是,我在第 16 行收到此错误:PL/SQL: SQL 语句被忽略,这是我使用 fetch 的行。
CREATE OR REPLACE PROCEDURE enable_trigg_proc
IS
v_trigger_name trigger_name.user_triggers%TYPE;
CURSOR enable_trigg_cur
IS
SELECT TRIGGER_NAME INTO v_trigger_name
FROM user_triggers
WHERE STATUS = 'DISABLED';
BEGIN
OPEN enable_trigg_cur;
LOOP
FETCH enable_trigg_cur INTO v_trigger_name ;
EXIT WHEN enable_trigg_cur%NOTFOUND;
EXECUTE IMMEDIATE 'ALTER TRIGGER v_trigger_name ENABLE';
END LOOP;
close enable_trigg_cur;
END;
Run Code Online (Sandbox Code Playgroud) database-cursor ×11
oracle ×5
sql ×4
postgresql ×3
mysql ×2
plsql ×2
db2 ×1
dbi ×1
graphql ×1
large-data ×1
mysql-python ×1
perl ×1
psycopg2 ×1
pyodbc ×1
python ×1
python-3.x ×1
security ×1