私信  •  关注

Barmar

Barmar 最近创建的主题
Barmar 最近回复了
2 年前
回复了 Barmar 创建的主题 » 利用python中的单链表实现队列中的AttributeError

当队列为空时,可以设置 p None 当你这么做的时候 p = self.front .然后,当你尝试这样做时,会出现错误 while p.link is not None 因为 P 不是节点。

如果你在排队等待第一个noe,你应该从方法返回。

    def enqueue(self, data):
        temp = Node(data)
        if self.front is None:
            self.front = temp
            return

        p = self.front
        while p.link is not None:
            p = p.link
        p.link = temp
        temp.link = None
2 年前
回复了 Barmar 创建的主题 » 条件不适用于PHP和mysqli

一旦你把一个学生分配给一个老师,你就应该跳出教师循环,这样你就不会试图把这个学生分配给另一个老师。

当你把一个学生分配给一个老师时,你需要增加 $teacher_info['assigned'] .为了做到这一点,迭代变量需要是对数组元素的引用;否则,您将获得阵列的副本,这不会影响未来的迭代。

在下面的代码中,我已将所有查询转换为准备好的语句。

$conn = mysqli_connect($serverName, $user, $password, $dbName);
if(mysqli_connect_errno()){
    echo "Failed to connect to mysqli.".mysqli_connect_errno();
} else {
    $insert_assignment_stmt = $conn->prepare("INSERT INTO assignment(student_name, advisor_name, subject) values(?, ?, ?)");
    $insert_assignment_stmt->bind_param("sss", $name_student, $name_teacher, $subject);
    $update_teacher_stmt = $conn->prepare("UPDATE teachers SET assigned = assigned + 1 WHERE name = ?");
    $update_teacher_stmt->bind_param("s", $name_teacher);
    $update_student_stmt = $conn->prepare("UPDATE students SET assigned = 1 WHERE name = ?");
    $update_student_stmt->bind_param("s", $name_student);

    foreach($students_info as &$student_info){
        foreach($teachers_info as &$teacher_info){
            if($student_info['assigned'] == 0 && $student_info['ee_subject'] == $teacher_info['ee_subject_1_choice'] && $teacher_info['assigned'] < 4 ){
                $name_student = $student_info['name'];
                $name_teacher = $teacher_info['name'];
                $subject = $student_info['ee_subject'];

                $insert_assignment_stmt->execute();
                $update_teacher_stmt->execute();
                $update_student_stmt->execute();

                $teacher_info['assigned']++;

                break;
            }
        }
    }
}
mysqli_close($conn);
1 年前
回复了 Barmar 创建的主题 » 我需要用python替换SQL文件中的某个数字

在中打开文件时 w

你应该把读和写作为独立的步骤——首先阅读整个内容,然后打开它进行写作。

另一个问题是你的 for i in line: line 是一根绳子,所以 i 是一个字符(包含一个元素的字符串)。这永远不会是一场灾难 int .

可以使用正则表达式查找数字并替换它。

import re

with open("prueba.sql", "r") as fin:
    contents = fin.read()

contents = re.sub(r'\b\d+\b', '5000', contents)

with open("prueba.sql", "w") as fout:
    fout.write(contents)
1 年前
回复了 Barmar 创建的主题 » 使用jQuery从select中选择值时,如何更改Div内容?

使用 this.value 在事件处理程序中获取下拉列表中选择的值。

当您从下拉列表中选择某个内容时 change 事件被触发,而不是 click .

div:gt(5) 不是应该显示结果的div的正确选择器。编号始于 0 所以是DIV number 4 .你可以用 .eq(4) 选择那个。

var content = $("div").eq(4);
$("select").on("change", function(event) {
  content.html(this.value);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="toolbar-wrapper">
  <div>
    <div>
      <label>Product Count</label>
      <div class="select-group">
        <select>
          <option value="4 products" selected="selected">4 products</option>
          <option value="6 products">6 products</option>
          <option value="8 products">8 products</option>
        </select>
      </div>
    </div>

    <div>4 products</div>
  </div>
</div>
2 年前
回复了 Barmar 创建的主题 » 用Python从文件的2个元素创建哈希表

第二个 f.readlines() 没有要读取的内容,因为您已经读取了整个文件。

将文件读入列表变量,然后遍历列表。

with open("/Users/admin/Downloads/Project_files/dictionary.txt") as f, open("/Users/admin/Downloads/Project_files/text_combined.txt", "w",encoding = 'utf-8') as textfile:
    lines = f.readlines():
    for i in lines:
        for j in lines:
            text_c = i.strip() + j.strip()
            n = text_file.write(SHA1_hash(text_c) + "\n")
2 年前
回复了 Barmar 创建的主题 » 在MySQL中使用三个表进行计算

你需要在总和内乘以工资率。你要计算小时数的总和,然后乘以组中的一个比率。因此,如果任务是由多人完成的,你可以选择其中一人,并使用他们的工资作为整个任务的费率。

SELECT
   # we need the title of the task
   t.title,

   # total hours completed on this task by employees
   # dividing the diff by 3600 to get sec into hour form
   SUM(((TO_SECONDS(ta.finish) - TO_SECONDS(ta.start)) / 3600)) totalHrs,

   # calculate the total cost by each employee and sum it up
   SUM(((TO_SECONDS(ta.finish) - TO_SECONDS(ta.start)) / 3600) * wrd.wages_rate) cost
FROM task t
JOIN task_assignment ta on t.id = ta.task_id
JOIN work_rights_detail wrd on ta.employee_id = wrd.account_id
GROUP BY ta.task_id

为了避免重复时间段的计算,可以在子查询或CTE中进行。

WITH task_hours AS (
    SELECT 
        ta.task_id, 
        ta.employee_id, 
        (TO_SECONDS(ta.finish) - TO_SECONDS(ta.start)) / 3600 AS hours_worked
    FROM task_assignment AS ta
)

SELECT 
    t.title, 
    SUM(th.hours_worked) AS totalHrs, 
    SUM(th.hours_worked * wrd.wages_rate AS cost
FROM task AS t
JOIN task_hours AS th ON t.id = th.task_id
JOIN work_rights_detail wrd on th.employee_id = wrd.account_id
GROUP BY ta.task_id
2 年前
回复了 Barmar 创建的主题 » C到Python管道-如何检测读卡器访问

当你停止阅读程序时,作者将收到 SIGPIPE 当它试图写入管道时发出信号。此信号的默认配置是终止进程。

如果要检测这种情况,请使用 signal() sigaction() 改变性情 SIG_IGN .然后写信给管道将报告 EPIPE 错误

此外,不应每次通过回路时都关闭和重新打开管道。开始时打开一次,结束时关闭。关闭管道会导致读卡器出现EOF,之后它将无法读取任何内容。

#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
  
int main()
{
    int fd;
  
    // FIFO file path
    char * myfifo = "/tmp/myfifo";
    
    // Creating the named file(FIFO)
    // mkfifo(<pathname>, <permission>)
    mkfifo(myfifo, 0666);
    // Open FIFO for write only
    fd = open(myfifo, O_WRONLY);
  
    signal(SIGPIPE, SIG_IGN);

    char arr1[80];
    while (1)
    {
  
        // Take an input from user.
        fgets(arr1, 80, stdin);
  
        // Write the input on FIFO
        // and close it
        int res = write(fd, arr1, strlen(arr1)+1);
        if (res < 0) {
            perror("write");
            break;
        }
    }
    close(fd);
    return 0;
}

当您停止编写程序时,当读卡器尝试从管道中读取时,它将获得EOF。什么时候 f.readline() 到达EOF时,它返回一个空字符串。你的Python脚本没有检查这一点,所以它会无限循环。

将读卡器更改为:

with open("/tmp/myfifo") as f:
    while True:
        line = f.readline()
        if not line:
            break
        print(line, end = "")

当管道闭合时,回路将终止。

2 年前
回复了 Barmar 创建的主题 » 有人能解释一下python代码是如何工作的吗?[重复]

该循环实际上相当于:

for x in a:
    a[1] = x

所以每次通过循环,它都会 a[1] 指向列表的当前元素。最后,它包含列表的最后一个元素。

这个 mysql.proc 表在MySQL 8.0中被删除。看见 No more mysql.proc in MySQL 8.0

你可以用 information_schema.routines 获取有关存储过程的信息。但这是只读视图,无法更新。所以我认为再也没有简单的方法来重命名程序了。您可以使用动态SQL来使用此信息定义具有新名称的过程。

编辑:

不幸的是,仅在MySQL中无法实现上述功能,因为 CREATE PROCEDURE 无法使用 PREPARE 信息模式。日常工作 不包含重新创建过程所需的所有信息。你可以用一种外部语言通过执行 SHOW CREATE PROCEDURE 查询,然后替换名称以形成新查询。

2 年前
回复了 Barmar 创建的主题 » 从Python交互运行多个Bash命令

你不需要等待 # 在每个命令之间。您可以发送所有命令,忽略shell提示。外壳缓冲所有输入。

您只需等待用户名和密码提示,然后等待最终的 # 在最后一个命令之后。

你还需要发送 exit 命令,否则你就得不到EOF。

import pexpect, sys

child = pexpect.spawn("bash", timeout=60)
child.logfile = sys.stdout
child.sendline("cd /workspace/my_notebooks/code_files")
child.sendline('ls')
child.sendline('git add .')
child.sendline('git commit')
child.sendline('git push origin main')
child.expect('Username .*:')
child.sendline(<my_github_username>)
child.expect('Password .*:')
child.sendline(<my_github_password>)
child.expect('#')
child.sendline('exit')
child.expect(pexpect.EOF)

如果遇到60秒超时,可以使用 timeout=None 禁用这个。看见 pexpect timeout with large block of data from child

还可以在一行中组合多个命令:

import pexpect, sys

child = pexpect.spawn("bash", timeout=60)
child.logfile = sys.stdout
child.sendline("cd /workspace/my_notebooks/code_files && ls && git add . && git commit && git push origin main')
child.expect('Username .*:')
child.sendline(<my_github_username>)
child.expect('Password .*:')
child.sendline(<my_github_password>)
child.expect('#')
child.sendline('exit')
child.expect(pexpect.EOF)

使用 && 两个命令之间的切换确保了在任何一个命令失败时停止。

一般来说,我不建议使用 pexpect 为了这个。制作一个shell脚本,该脚本可以执行您想要的所有操作,并使用单个脚本运行该脚本 subprocess.Popen() 呼叫

2 年前
回复了 Barmar 创建的主题 » 如何将这些重复的if语句转换为python中的单个循环?

使用一个循环,对图像的连续切片求和 n 列表

for num2, row2 in enumerate(grid):
    for idx in range(len(n)):
        if sum(n[:idx]) <= num2 < sum(n[:idx+1]):
            grid[num2][idx+1] = c[num2]

这是您编写的代码到循环的直接映射,如果 N 不会变得太大。BrokenBenchmark的答案经过优化,以利用每个片段的总和是前一个片段加上当前元素的总和这一事实。

2 年前
回复了 Barmar 创建的主题 » 如何在python中计算空行数

你在增加 line_num 对于空行和非空行。你应该是递增的 empty_lines 什么时候 len(line) == 0 .

自从 行数 应该计算所有行,在任何条件之外递增。

import sys

def read():
    file_name = input("Name of the file to be read: ")
    try:
        with open(file_name, 'r') as file:
            lst = []
            line_num = 0
            accept_line = 0
            reject_line = 0
            empty_line = 0
            for line in file:
                line_num += 1
                line = line.strip() 
                if (len(line) == 0):
                    empty_line += 1
                elif (line.isalpha()):
                    accept_line += 1
                    lst.append(line)
                else:
                    reject_line += 1

        print("Read", line_num, "lines")
        print("Rejected", reject_lines, "lines")
        print("Empty", empty_line, "lines")
    except FileNotFoundError:
        print("open", file_name, "failure.")
        sys.exit(0)
    return lst, accept_line
2 年前
回复了 Barmar 创建的主题 » MySQL取消加入案例不匹配

使用一个单独的查询来获取其他记录,并将它们与 UNION

SELECT *
FROM (
    SELECT u.id, u.name, n.other_user, n.notification FROM notifications n
    INNER JOIN users u ON
    CASE
      WHEN n.user = :me THEN u.id = n.other_user
      WHEN n.other_user = :me THEN u.id = n.user
    END
    
    UNION
    
    SELECT n.user, '', n.other_user, n.notification
    FROM notification n
    WHERE n.user = 0 AND n.other_user = 0
) AS x
ORDER BY x.id
2 年前
回复了 Barmar 创建的主题 » 使用jQuery更改订单内容对象

使用 .prependTo() 方法将元素移动到容器元素的开头。

$("#move").click(function() {
  $(".has-submenu span").prependTo($(".has-submenu"));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="#" class="has-submenu">
  Some text content  
  <span class="dropdown-menu-toggle">toggle</span>
  <span class="sub-arrow"> > </span>
</a>
<br>
<button id="move">Move spans</button>
3 年前
回复了 Barmar 创建的主题 » MySQL C API在子查询返回超过1行时出错

在您呼叫之前不会报告此错误 mysql_store_result .

ret = mysql_query(con, "SELECT 1, (SELECT user_id FROM users)");
printf("Ret is %d\n", ret); // -->  "Ret is 0"
MYSQL_RES *result = mysql_store_result(con);
if (result == NULL) {
    printf("Error is %s", mysql_error(con); // prints "Subquery returns more than 1 row"
}
2 年前
回复了 Barmar 创建的主题 » 我试图用python打印json文件中的信息

你必须在所有的星期和日子里循环。

for week in obj['weeks']:
    for day in week['days']:
        print(day['items'])
2 年前
回复了 Barmar 创建的主题 » Python:nested for循环被字典中的空值中断

检查一下 financials 定义为 if 陈述

if 'financials' in data[symbol]['financials']:
    row =  [
        data[symbol]['financials']['financials'][0]['fiscalDate'],
        symbol,
        data[symbol]['price'],
        data[symbol]['financials']['financials'][0]['cashFlow'],
        data[symbol]['financials']['financials'][0]['netIncome'],
        data[symbol]['financials']['financials'][0]['totalAssets'],
        data[symbol]['financials']['financials'][0]['totalLiabilities'],
        data[symbol]['financials']['financials'][0]['revenue'],
        data[symbol]['financials']['financials'][0]['ebit'],
        data[symbol]['stats']['ttmEPS'],
        data[symbol]['stats']['sharesOutstanding'],
        data[symbol]['advanced-stats']['profitMargin'],
        data[symbol]['advanced-stats']['totalRevenue'],
        data[symbol]['stats']['year2ChangePercent'],
        data[symbol]['stats']['year1ChangePercent'],
        data[symbol]['stats']['month6ChangePercent'],
        data[symbol]['stats']['month3ChangePercent'],
        data[symbol]['stats']['month1ChangePercent']
    ]
else:
    row = [
        'N/A',
        symbol,
        data[symbol]['price'],
        'N/A',
        'N/A',
        'N/A',
        'N/A',
        'N/A',
        'N/A',
        data[symbol]['stats']['ttmEPS'],
        data[symbol]['stats']['sharesOutstanding'],
        data[symbol]['advanced-stats']['profitMargin'],
        data[symbol]['advanced-stats']['totalRevenue'],
        data[symbol]['stats']['year2ChangePercent'],
        data[symbol]['stats']['year1ChangePercent'],
        data[symbol]['stats']['month6ChangePercent'],
        data[symbol]['stats']['month3ChangePercent'],
        data[symbol]['stats']['month1ChangePercent']
    ]
financials_df = financials_df.append(pd.Series(row, index=my_columns), ignore_index=True)
2 年前
回复了 Barmar 创建的主题 » MySQL中Create Function语句存在问题

您有语法问题:

  1. 丢失的 ; 在每句话的结尾。
  2. 使用 SET 分配一个变量。
DELIMITER $$

create function [dbname].id_datasource (descval varchar(100))
returns varchar(10)
begin  
        declare datasource varchar(10) default '';
        SET datasource =   
            case 
                when descval like '%CLT%' then 'CLT'  
                when descval like '%PCB%' then 'PCB'  
                else 'NA' 
            end; 
        return datasource;
end
$$

DELIMITER ;

没有必要两者兼得 LIKE 'CLT%' LIKE '%CLT%' 因为任何匹配的 CLT% 也会匹配 %CLT% .

2 年前
回复了 Barmar 创建的主题 » PHP通过逗号从mysql中提取geojson

不要通过连接或回显字符串来创建JSON。创建一个包含所有数据的数组,然后使用 json_encode() .

因为表列包含 JSON ,在将其推送到结果数组之前,需要对其进行解码。否则它将被编码两次。

$sql = "SELECT * FROM `polygons` ORDER BY id";

$result = mysqli_query($dbcon, $sql);

$check = mysqli_num_rows($result);
if($check > 0){
    $array = ['type' => 'FeatureCollection', 'features' => []];
    while($data= mysqli_fetch_assoc($result)){
        $array['features'][] = json_decode($data['geojson'], true);
    }
    echo json_encode($array);
}
2 年前
回复了 Barmar 创建的主题 » Python/SQL:存储序列

你可以用 CASE SQL中的表达式,使用 BETWEEN 操作人员

SELECT
    CASE
        WHEN stop_id BETWEEN 9022001001281071 AND 9022001001281079 THEN 'Red line'
        WHEN stop_id BETWEEN 9022001001209996 AND 9022001001221005 THEN 'Blue line'
        WHEN stop_id BETWEEN 9022001001282307 AND 9022001001282314 THEN 'Yellow line'
        ELSE 'Extra Line'
    END AS line

注意 之间 首先需要较小的数字,所以我颠倒了你的站点ID的顺序。

4 年前
回复了 Barmar 创建的主题 » 如何在mysql中插入二进制值

你可以用 bit-value literal

INSERT INTO mytable (number) VALUES (b'00000010');
or
INSERT INTO mytable (number) VALUES (0b00000010)
4 年前
回复了 Barmar 创建的主题 » MySQL LEFT JOIN-如何处理记录与PHP不匹配的情况

可以在SQL中使用 IFNULL() .

$query = "SELECT MAX(unit.unit_pk) AS unit_pk,
       GROUP_CONCAT(CONCAT('<strong>',unit.unit_code,': </strong>', unit_outcome.unit_outcome) SEPARATOR '|') unit_outcomes,
       MAX(program_outcome.program_outcome) program_outcome,
       GROUP_CONCAT(unit_outcome.unit_outcome_pk) unit_outcome_pks, 
       program_outcome.program_outcome_pk,
       IFNULL(program_outcome.program_outcome, 'No matching program outcome.') AS program_outcome
FROM unit
LEFT JOIN unit_unit_outcome_lookup
    ON unit_unit_outcome_lookup.unit_fk = unit.unit_pk
LEFT JOIN unit_outcome
    ON unit_outcome.unit_outcome_pk = unit_unit_outcome_lookup.unit_outcome_fk
LEFT JOIN program_outcome_unit_outcome_lookup
    ON program_outcome_unit_outcome_lookup.unit_outcome_fk = unit_outcome.unit_outcome_pk
LEFT JOIN program_outcome
    ON program_outcome.program_outcome_pk = program_outcome_unit_outcome_lookup.program_outcome_fk
GROUP BY program_outcome_pk ORDER BY cast(program_outcome as unsigned) ASC";
4 年前
回复了 Barmar 创建的主题 » Mysql使用CONCAT和两个列创建视图

更改使用的现有视图的步骤 ALTER VIEW .

, ,不是 AND .

ALTER VIEW STRANKEPView AS (
    SELECT *, CONCAT('P-',strp_ID) AS strp_nas_br,
              CONCAT('A',strp_aa,'.') AS strp_aa_nas_br
    FROM STRANKEP 
);

使用是没有意义的 COALESCE() 只有一个论点,所以我把它从视图中删除了。目的 合并() 如果参数是 NULL

4 年前
回复了 Barmar 创建的主题 » 从PHP到MySQL bind_param()bool错误

您需要获取查询的结果。

$result = $conn->query("SELECT LAST_INSERT_ID();");
$row = $result->fetch_row();
$last = $row[0];
if ($last == "") {
    $index = 0;
} else {
    $index = $last + 1;
}

$last = $conn->insert_id;

另一个问题是 key

$stmt = $conn->prepare("INSERT INTO Users (`key`, userIP, date) VALUES (?, ?, ?)");

添加另一个循环。

$.getJSON('test.json', function(data) {
  $.each(data, function(i, d) {
    $.each(d.user.products, function () {
      $("table").append($("<tr>").append(
        $("<td>").addClass("Title").text(this.stock),
      ));
    });
  });
});
4 年前
回复了 Barmar 创建的主题 » 在mysql中,我可以只使用别名将sum添加到另一个sum中吗

不,不能在同一查询中引用列别名。您必须将其设为子查询。

SELECT id, answerA, answerB, answerC, (answerA + answerM + answerD) AS total
FROM (
    select 
        t1.id,
        sum(t2.answ = t1.answ) as answerA,
        sum(t3.answ = t1.answ) as answerM,
        sum(t4.answ = t1.answ) as answerD,
        sum(answerA + answerM + answerD) as total
    from t1
    left join t2 on t2.id = t1.t2fk
    left join t3 on t3.id = t1.t3fk
    left join t4 on t4.id = t1.t4fk
    GROUP BY t1.id
) AS subquery

或者你可以写一个等价的表达式。

select 
    t1.id,
    sum(t2.answ = t1.answ) as answerA,
    sum(t3.answ = t1.answ) as answerM,
    sum(t4.answ = t1.answ) as answerD,
    sum(t1.answ IN (t2.answ, t3.answ, t4.answ)) as total
from t1
left join t2 on t2.id = t1.t2fk
left join t3 on t3.id = t1.t3fk
left join t4 on t4.id = t1.t4fk
GROUP BY t1.id
4 年前
回复了 Barmar 创建的主题 » 压缩if循环python

如果'word'在'minor_words'中,请加入'minor_words'

word if word in minor_words 意思是如果 word 是在 minor_words 单词 (这是来自 title

else word.capitalize() 意思是如果 单词 小词 ,我们加入大写的单词。

为什么会有 =''

小词 参数。在上一个示例中,您只使用一个参数调用函数:

title_case('the quick brown fox')

title_case('the quick brown fox', '')

如果没有默认值,您将得到一个错误,即没有提供足够的参数。

4 年前
回复了 Barmar 创建的主题 » 从MYSQL数据PHP定义var

你在重新定义变量 websiteVars 每次循环。

您应该保留创建数组的原始循环 $json_array

var websiteVars = <?php echo json_encode($json_array); ?>;
5 年前
回复了 Barmar 创建的主题 » MySQL数据库列的时间格式不可识别

它看起来像一个Unix时间戳乘以1000(即以毫秒而不是秒为单位)。这类时间戳在JavaScript中使用。

使用 FROM_UNIXTIME(created_time/1000) 将其转换为 DATETIME

mysql> select from_unixtime(1543476095000/1000);
+-----------------------------------+
| from_unixtime(1543476095000/1000) |
+-----------------------------------+
| 2018-11-29 01:21:35               |
+-----------------------------------+

使用 1000 * UNIX_TIMESTAMP(datetime value) 转换 日期时间

4 年前
回复了 Barmar 创建的主题 » jQuery使用$(选择器)预处理多个div

el.prepend 应该是 $(el).prepend . el 是一个DOM元素,所以您调用本机 prepend() 方法;它将字符串参数视为文本节点,而不是HTML。

$(el) 创建引用元素的jQuery对象。jQuery prepend() 方法解析HTML。

$('.dash').each((i, el) => {
  console.log(el);
  $(el).prepend('<div class="digit"><div class="top" style="display: none;">0</div><div class="bottom" style="display: block;">0</div></div>');
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="dash">
</div>
4 年前
回复了 Barmar 创建的主题 » 如何在python中循环遍历大型嵌套列表?

使用嵌套循环。

for l1 in geojson['geometry_coordinates']:
    for l2 in l1:
        for l3 in l2:
            lon.append(l3[0])
            lat.append(l3[1])
4 年前
回复了 Barmar 创建的主题 » Python搜索2d数组并返回if found和index found

不要压平二维列表。使用嵌套循环 enumerate() 所以你可以得到索引。

def find_in_2d(lists, value):
    for i, l in enumerate(lists):
        for j, item in enumerate(l):
            if item == value:
                return i, j
    return None, None

i, j = find_in_2d(assets, element.get("asset")
if i is not None:
    print("found updating")
    asset[i][j] = new_value
5 年前
回复了 Barmar 创建的主题 » MySQL:对整个表应用按查询分组

连接两个表并按两列分组。

SELECT cr.register_id, cr.number, COUNT(*) AS cnt
FROM tbl_cross AS cr
JOIN tbl_register as r ON cr.register_id = r.id
WHERE r.collection_id = 56
GROUP BY register_id, number
HAVING cnt > 1

你可以用 HAVING 若要筛选出不重复项,不需要子查询。

4 年前
回复了 Barmar 创建的主题 » JQuery:使用setInterval以随机秒数显示文本

使用 setTimeout() 运行下一个迭代,而不是 setInterval() ,每次随机计算超时时间。

(function() {
  var timesRun = 0;
  var runLimit = 10;

  i = 0;

  function updateCounter() {
    if (timesRun < runLimit) {
      var timeout = 2000 * Math.random() + 1000; // random timeout from 1000 to 3000
      setTimeout(function() {
        $('#changing-number').fadeOut(function() {
          $(this).html(timesRun).fadeIn();
        });
        timesRun++;
        updateCounter();
      }, timeout);
    }
  }
  updateCounter();
})();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<span id="changing-number">0</span> out of 10 numbers have been displayed.
4 年前
回复了 Barmar 创建的主题 » 更新时出现MySQL错误1157,但是我在where子句中使用主键

仅仅使用键列是不够的,您必须以允许使用索引来查找行的方式使用它。从 documentation :

如果优化器决定不对键列使用索引,则UPDATE和DELETE语句可能在安全更新模式下产生错误,即使在WHERE子句中指定了键。

因为你在测试 BINARY ip_ip 而不仅仅是 ip_ip 它本身不能使用索引,所以您会得到错误。

你能用一个函数来转换 INET6_ATON() varbinary ,而不是使用 BINARY 专栏的接线员然后它应该能够使用索引,并且不会出现错误。

UPDATE ip 
SET 
    ip_countryCode = 'GB',
    ip_countryName = 'United Kingdom',
    ip_city = 'London' 

WHERE ip_ip BETWEEN CAST(INET6_ATON('2.57.77.0') AS BINARY(16)) AND 
                    CAST(INET6_ATON('2.57.77.255') AS BINARY(16);
5 年前
回复了 Barmar 创建的主题 » 线程中的python socket recv

你必须通过 listen 函数到 threading.Thread() 是的。在主线程中调用函数,等待它完成,然后传递它的返回值(即 None ,因为函数从不返回任何内容)。

t2 = threading.Thread(target = listen)
5 年前
回复了 Barmar 创建的主题 » mysql在一列上匹配重复项,而在另一列上只匹配不同项

添加 GROUP BY A.Name, A.Score 到最后,你只能得到一行的名字和分数的每个组合。

如果你只想在同一个部门有两个不同的分数时给他们看,用 COUNT(DISTINCT Score) 而不是 COUNT(*) 是的。

SELECT A.UserID, A.DeptID, A.Name, A.Score
FROM User AS A
INNER JOIN (
    SELECT Name, DeptID
    FROM User
    GROUP BY Name, DeptID
    HAVING COUNT(DISTINCT Score) > 1
) AS B ON A.Name = B.Name AND A.DeptID = B.DeptID
GROUP BY A.Name, A.Score

第一, import_csv 不应该将列表包装到另一个列表中,它应该只返回行列表。

def import_csv(csv_file):
    name_entries = []
    with open(csv_file) as csvfile:
        reader = csv.reader(csvfile)
        return list(reader)

其次, exclude_entries 不需要使用 csv ,在导入数据时已使用,并且 name_entries 是行的列表。

第三,您应该只匹配包含电子邮件地址的list元素。

你可以用 filter() 过滤列表,而不是循环。

def exclude_regex_users(name_entries):
    r = re.compile(r'\w+\+\d+@trellis\.law')
    pulled_names = filter(lambda row: r.match(row[6]) or r.match(row[9]), name_entries)

    print(pulled_names)
4 年前
回复了 Barmar 创建的主题 » 使用join mysql时字段列表中的未知列

子查询没有返回 campaign_code 列。此外,还需要使用子查询的别名。

SELECT pm.*, cp.campaign_code
FROM dmspro_mys_product_master AS pm
INNER JOIN (
    SELECT DISTINCT product_id, campaign_code
    FROM dmspro_mys_campaign_product) AS cp
ON cp.product_id = pm.product_id
4 年前
回复了 Barmar 创建的主题 » 使用newline和linux mail命令通过pythons子进程发送邮件

你需要把身体和主题用引号引起来。如果你用F字串就容易多了

cmd  = f"echo '{body}' | mail -s '{subject}' -r '{fromAddr}' '{toAddr}'"

注意,您需要确保在任何参数中都没有引号字符——确保密码中不允许使用单引号。